diff --git a/api/controllers/calculationModule.js b/api/controllers/calculationModule.js index 389475d..cd53367 100644 --- a/api/controllers/calculationModule.js +++ b/api/controllers/calculationModule.js @@ -12,11 +12,13 @@ const validationMessages = { pointedLoad: 'مقدار بار متمرکز را وارد کنید', distributedLoad: 'مقدار بار گسترده را وارد کنید', bearingBarThickness: 'ضخامت تسمه باربر را وارد کنید', + crossBarThickness: 'ضخامت تسمه رابط را وارد کنید', bearingBarPitch: 'گام تسمه باربر را انتخاب کنید', bearingBarPitch_not_ok: 'مقدار گام تسمه باربر صحیح نیست', crossBarPitch: 'گام تسمه رابط را تنخاب کنید', crossBarPitch_not_ok: 'مقدار گام تسمه رابط صحیح نیست', bearingBarHeight: 'ارتفاع تسمه باربر را انتخاب کنید', + crossBarHeight: 'ارتفاع تسمه رابط را وارد کنید', bearingBarHeight_not_ok: 'مقدار ارتفاع تسمه باربر صحیح نیست', clearSpan: 'مقدار دهنه را وارد کنید', sigma_ok: 'تنش مجاز', @@ -34,11 +36,13 @@ const validationMessages = { pointedLoad: 'Enter the amount of pointed load', distributedLoad: 'Enter the amount of distributed load', bearingBarThickness: 'Enter bearing bar thickness', + crossBarThickness: 'Enter cross bar thickness', bearingBarPitch: 'Select bearing bar pitch', bearingBarPitch_not_ok: 'Bearing bar pitch value is incorrect', crossBarPitch: 'Select cross bar pitch', crossBarPitch_not_ok: 'Cross bar pitch value is incorrect', bearingBarHeight: 'Select bearing bar height', + crossBarHeight: 'Enter cross bar height', bearingBarHeight_not_ok: 'Bearing bar height is incorrect', clearSpan: 'Enter clear span', sigma_ok: 'Tension OK', @@ -213,7 +217,33 @@ module.exports.calculate = [ .bail() .isNumeric().withMessage((value, {req}) => { return v_m[req.body.locale].format.number + }), + + + //////////////////////////// cross bar height and thickness + body('crossBarThickness') + .custom((value, {req}) => { + if (req.body.gratingType === 'pressured' && !value) return Promise.reject(validationMessages[req.body.locale].crossBarThickness) + else return true + }) + .bail() + .if((value, {req}) => req.body.gratingType === 'pressured') + .isNumeric().withMessage((value, {req}) => { + return v_m[req.body.locale].format.number + }), + + body('crossBarHeight') + .custom((value, {req}) => { + if (req.body.gratingType === 'pressured' && !value) return Promise.reject(validationMessages[req.body.locale].crossBarHeight) + else return true + }) + .bail() + .if((value, {req}) => req.body.gratingType === 'pressured') + .isNumeric().withMessage((value, {req}) => { + return v_m[req.body.locale].format.number }) + + ], (req, res) => { const errors = validationResult(req) @@ -225,7 +255,9 @@ module.exports.calculate = [ let vehicleClass = req.body.vehicleClass let bearingBarHeight = req.body.bearingBarHeight + let crossBarHeight = req.body.crossBarHeight let bearingBarThickness = req.body.bearingBarThickness + let crossBarThickness = req.body.crossBarThickness let bearingBarPitch = req.body.bearingBarPitch let crossBarPitch = req.body.crossBarPitch let clearSpan = req.body.clearSpan @@ -284,6 +316,220 @@ module.exports.calculate = [ }, } + + ///////// grating weight + const gratingLength = 1000 + const gratingWidth = 1000 + const frameThickness = 5 + const forgeCrossBarThickness = 6 + + ///////////////// api + + + function forgeWeight() { + // formula variables + const B2 = gratingLength + const B3 = gratingWidth + const B4 = bearingBarHeight + const B5 = bearingBarThickness + const B6 = forgeCrossBarThickness + const B7 = bearingBarPitch + const B8 = crossBarPitch + const B9 = frameThickness + // + const E2 = B2 - 2 * B9 + const E3 = B3 + const E4 = B2 - 2 * B9 + const E5 = B3 + // + const H2 = 0 + const H3 = 2 + const H4 = E5 / B7 + 1 + const H5 = E4 / B8 - 1 + const H6 = E4 * B4 * B5 / 1000000 * 7.85 * H4 + const H7 = (E5 / 1000) * B6 * B6 * 7.85 / 1000 * H5 + const H8 = E2 * B9 * B4 / 1000000 * H2 * 7.85 + E3 * B4 * B9 / 1000000 * 7.85 * H3 + const H9 = (1750 * (25.25 / (B4 * B5))) + + // + const E6 = H6 + H7 + H8 + // + const K2 = E2 * (2 * (B4 + B5)) * H2 / 1000000 + const K3 = E3 * (2 * (B4 + B5)) * H3 / 1000000 + const K4 = E4 * (2 * (B4 + B5)) * H4 / 1000000 + const K5 = E5 * B6 * B6 * H5 / 1000000 + const K6 = K2 + K5 + const K7 = 80 + const K8 = K6 * K7 / 1000000 * 7140 + const K9 = K8 / E6 * 100 + // + const E7 = K9 / 100 * E6 + const E8 = E6 + E7 + // + const H10 = E8 / ((B2 * B3) / 1000000) + + return { + normal: Number(E6.toFixed(2)), + galvanized: Number(E8.toFixed(2)) + } + } + + // function forgeWeight_rounded() { + // // formula variables + // const B2 = gratingLength + // const B3 = gratingWidth + // const B4 = bearingBarHeight + // const B5 = bearingBarThickness + // const B6 = forgeCrossBarThickness + // const B7 = bearingBarPitch + // const B8 = crossBarPitch + // const B9 = frameThickness + // // + // const E2 = Math.round(B2 - 2 * B9) + // const E3 = B3 + // const E4 = Math.round(B2 - 2 * B9) + // const E5 = B3 + // // + // const H2 = 0 + // const H3 = 2 + // const H4 = Math.round(E5 / B7 + 1) + // const H5 = Math.round(E4 / B8 - 1) + // const H6 = Number((E4 * B4 * B5 / 1000000 * 7.85 * H4).toFixed(2)) + // const H7 = Number(((E5 / 1000) * B6 * B6 * 7.85 / 1000 * H5).toFixed(2)) + // const H8 = Number((E2 * B9 * B4 / 1000000 * H2 * 7.85 + E3 * B4 * B9 / 1000000 * 7.85 * H3).toFixed(2)) + // const H9 = Math.round((1750 * (25.25 / (B4 * B5)))) + // + // // + // const E6 = Number((H6 + H7 + H8).toFixed(2)) + // // + // const K2 = Number((E2 * (2 * (B4 + B5)) * H2 / 1000000).toFixed(2)) + // const K3 = Number((E3 * (2 * (B4 + B5)) * H3 / 1000000).toFixed(2)) + // const K4 = Number((E4 * (2 * (B4 + B5)) * H4 / 1000000).toFixed(2)) + // const K5 = Number((E5 * B6 * B6 * H5 / 1000000).toFixed(2)) + // const K6 = Number((K2 + K5).toFixed(2)) + // const K7 = 80 + // const K8 = Number((K6 * K7 / 1000000 * 7140).toFixed(2)) + // const K9 = Number((K8 / E6 * 100).toFixed(2)) + // // + // const E7 = Number((K9 / 100 * E6).toFixed(2)) + // const E8 = Number((E6 + E7).toFixed(2)) + // // + // const H10 = Number((E8 / ((B2 * B3) / 1000000)).toFixed(2)) + // + // ///////// debug variables + // // B + // console.log('************ B Column ************') + // console.log('B2 = ', B2) + // console.log('B3 = ', B3) + // console.log('B4 = ', B4) + // console.log('B5 = ', B5) + // console.log('B6 = ', B6) + // console.log('B7 = ', B7) + // console.log('B8 = ', B8) + // console.log('B9 = ', B9) + // // E + // console.log('************ E Column ************') + // console.log('E2 = ', E2) + // console.log('E3 = ', E3) + // console.log('E4 = ', E4) + // console.log('E5 = ', E5) + // console.log('E6 = ', E6) + // console.log('E7 = ', E7) + // console.log('E8 = ', E8) + // // H + // console.log('************ H Column ************') + // console.log('H2 = ', H2) + // console.log('H3 = ', H3) + // console.log('H4 = ', H4) + // console.log('H5 = ', H5) + // console.log('H6 = ', H6) + // console.log('H7 = ', H7) + // console.log('H8 = ', H8) + // console.log('H9 = ', H9) + // console.log('H10 = ', H10) + // // K + // console.log('************ K Column ************') + // console.log('K2 = ', K2) + // console.log('K3 = ', K3) + // console.log('K4 = ', K4) + // console.log('K5 = ', K5) + // console.log('K6 = ', K6) + // console.log('K7 = ', K7) + // console.log('K8 = ', K8) + // console.log('K9 = ', K9) + // // check H6 + // return E8 + // } + + function pressuredWeight() { + // formula variables + const B15 = gratingLength + const B16 = gratingWidth + const B17 = bearingBarHeight + const B18 = bearingBarThickness + const B19 = crossBarHeight + const B20 = crossBarThickness + const B21 = bearingBarPitch + const B22 = crossBarPitch + const B23 = frameThickness + // + const E15 = B15 - 2 + const E16 = B16 - 2 * B23 - 2 + const E17 = B15 - 2 * B23 - 2 + const E18 = B16 - 2 * B23 - 2 + // + const H17 = E18 / B21 - 1 + const H18 = E17 / B22 - 1 + const H20 = E18 * B19 * B20 / 1000000 * 7.85 * H18 + // + const H15 = 2 + const H16 = 2 + const H19 = E17 * B17 * B18 / 1000000 * 7.85 * H17 + const H21 = E15 * B23 * B17 / 1000000 * H15 * 7.85 + E16 * B17 * B23 / 1000000 * 7.85 * H16 + const H22 = H19 + H21 + // + const E19 = H19 + H20 + H21 - ((H17 - 1) * (H18 - 1) * B18 * B19 * B20) * 7.85 / 1000000 + // + const H23 = (H22 - E19) * 100 / E19 + // + const K15 = E15 * (2 * (B17 + B18)) * H15 / 1000000 + const K16 = E16 * (2 * (B17 + B18)) * H16 / 1000000 + const K17 = E17 * (2 * (B17 + B18)) * H17 / 1000000 + const K18 = E18 * (2 * (B19 + B20)) * H18 / 1000000 + const K19 = K15 + K18 + const K20 = 80 + const K21 = K19 * K20 / 1000000 * 7140 + const K22 = K21 / E19 * 100 + // + const E20 = K22 / 100 * E19 + // const E21=E19+E20-E22 + const E21 = E19 + E20 + const L25 = B15 + const L26 = B16 + // + const K25 = L25 - 4 - 2 * B23 - B20 + const K26 = L26 - 4 - 2 * B23 - B18 + // + + // console.log('H15 ' + H15) + // console.log('H16 ' + H16) + // console.log('H17 ' + H17) + // console.log('H18 ' + H18) + // console.log('H19 ' + H19) + // console.log('H20 ' + H20) + // console.log('H21 ' + H21) + // console.log('H22 ' + H22) + // console.log('H23 ' + H23) + + + // console.log('answer ' + H18) + + return { + normal: Number(E19.toFixed(2)), + galvanized: Number(E21.toFixed(2)) + } + } + ///////// pointed load function pointedLoad() { // static variables @@ -546,12 +792,14 @@ module.exports.calculate = [ // console.log('sigma =' + sigma) // console.log('L =' + L()) // console.log('D =' + D) + //////////////////////////////////////////////////////////////// calculate result const result = { sigma: null, sigmaStatus: null, deflection: null, - deflectionStatus: null + deflectionStatus: null, + gratingWeight: forge ? forgeWeight() : pressuredWeight() } if (sigma < 235) { result.sigma = validationMessages[locale].sigma_ok @@ -598,7 +846,8 @@ module.exports.calculate = [ sigma: null, sigmaStatus: null, deflection: null, - deflectionStatus: null + deflectionStatus: null, + gratingWeight: forge ? forgeWeight() : pressuredWeight() } if (sigma < 235) { result.sigma = validationMessages[locale].sigma_ok @@ -635,26 +884,26 @@ module.exports.getRelativeValues = [ [ body('gratingType') .notEmpty().withMessage((value, {req}) => { - return validationMessages[req.body.locale].gratingType + return validationMessages['fa'].gratingType }) .bail() .custom((value, {req}) => { if (value === 'forge' || value === 'pressured') return true - else Promise.reject(validationMessages[req.body.locale].gratingType_not_supported) + else Promise.reject(validationMessages['fa'].gratingType_not_supported) }), body('crossBarPitch') .notEmpty().withMessage((value, {req}) => { - return validationMessages[req.body.locale].crossBarPitch + return validationMessages['fa'].crossBarPitch }) .bail() .custom((value, {req}) => { if (req.body.gratingType === 'forge') { if (values.crossBarPitch_forge.includes(Number(value))) return true - else return Promise.reject(validationMessages[req.body.locale].crossBarPitch_not_ok) + else return Promise.reject(validationMessages['fa'].crossBarPitch_not_ok) } else { if (values.crossBarPitch_pressured.includes(Number(value))) return true - else return Promise.reject(validationMessages[req.body.locale].crossBarPitch_not_ok) + else return Promise.reject(validationMessages['fa'].crossBarPitch_not_ok) } }) ], diff --git a/assets/img/about/about-s1-i1.jpg b/assets/img/about/about-s1-i1.jpg index 06d0c4d..e198ea5 100644 Binary files a/assets/img/about/about-s1-i1.jpg and b/assets/img/about/about-s1-i1.jpg differ diff --git a/assets/img/about/about-s1-i2.jpg b/assets/img/about/about-s1-i2.jpg index 3eafe51..2734eb9 100644 Binary files a/assets/img/about/about-s1-i2.jpg and b/assets/img/about/about-s1-i2.jpg differ diff --git a/assets/img/about/hero.jpg b/assets/img/about/hero.jpg new file mode 100644 index 0000000..4459aec Binary files /dev/null and b/assets/img/about/hero.jpg differ diff --git a/assets/img/home/hp-s2-i2.jpg b/assets/img/home/hp-s2-i2.jpg index 9d70fd0..6076bff 100644 Binary files a/assets/img/home/hp-s2-i2.jpg and b/assets/img/home/hp-s2-i2.jpg differ diff --git a/assets/img/home/hp-s2-i3.jpg b/assets/img/home/hp-s2-i3.jpg index 76cb0d7..11e997b 100644 Binary files a/assets/img/home/hp-s2-i3.jpg and b/assets/img/home/hp-s2-i3.jpg differ diff --git a/assets/img/products/hero.jpg b/assets/img/products/hero.jpg index 0381d74..d6d4be6 100644 Binary files a/assets/img/products/hero.jpg and b/assets/img/products/hero.jpg differ diff --git a/assets/img/services/hero.jpg b/assets/img/services/hero.jpg index c1f4fb8..e96d757 100644 Binary files a/assets/img/services/hero.jpg and b/assets/img/services/hero.jpg differ diff --git a/assets/sass/_pages.scss b/assets/sass/_pages.scss index 5c75c21..8a31bf0 100644 --- a/assets/sass/_pages.scss +++ b/assets/sass/_pages.scss @@ -341,7 +341,7 @@ .hero { .bg { - background-image: url("../img/services/hero.jpg"); + background-image: url("../img/about/hero.jpg"); } } @@ -1494,6 +1494,10 @@ $appLayoutPadding: 55px; @include transition(0.1s); + & > .container-fluid, & > .container-fluid .row { + padding: 0 !important; + } + .appTitle { text-align: center; @@ -1545,6 +1549,7 @@ background: $theme; height: 100%; @include boxSizing(border-box); + position: relative; @media (max-width: 1400px) { padding: 55px 15px; @@ -1640,6 +1645,39 @@ .err { color: $red; } + + .copyRight { + position: absolute; + width: 100%; + font-size: 12px; + bottom: 5px; + left: 0; + + p { + color: rgba(#fff, 0.5); + text-align: center; + width: 100%; + + a { + @keyframes blinking { + from { + color: rgba(#fff, 0.5); + } + + to { + color: rgba(#fff, 0.7); + } + } + @include animation(blinking 1s alternate-reverse infinite); + @extend %defaultTransition; + color: rgba(#fff, 0.5); + + &:hover { + color: rgba(#fff, 1); + } + } + } + } } .el-input { @@ -1701,9 +1739,6 @@ flex-direction: column; justify-content: center; align-items: center; - opacity: 0; - height: 0; - overflow: hidden; .success { color: #67C23A; @@ -1724,7 +1759,8 @@ } p { - font-size: 20px; + font-size: 0; + letter-spacing: -10px; font-weight: bold; } @@ -1732,6 +1768,23 @@ @include animation(waiting 0.7s alternate-reverse infinite); } } + + .weight { + margin-top: 30px; + background: lightgray; + padding: 20px; + text-align: center; + opacity: 0; + + p { + font-size: 0; + letter-spacing: -10px; + } + + .colored { + color: $theme; + } + } } } diff --git a/pages/_lang/calculation/index.vue b/pages/_lang/calculation/index.vue index 3566aac..6eaf592 100644 --- a/pages/_lang/calculation/index.vue +++ b/pages/_lang/calculation/index.vue @@ -150,6 +150,13 @@

{{ validation.bearingBarThickness.msg }}

+ + + +

{{ validation.crossBarThickness.msg }}

+
+ +

{{ validation.bearingBarHeight.msg }}

+ + + + +

{{ validation.crossBarHeight.msg }}

+
+ +
+

{{ staticData.app.waiting }}

-

{{ staticData.app.validationErr }}

+

{{ staticData.app.validationErr }}

{{ appResult.sigma }}

{{ appResult.deflection }}

+
+

{{ staticData.app.t32 }}

+

+ {{ appResult.gratingWeight.normal }} + Kg/m2 +

+
+

{{ staticData.app.t33 }}

+

+ {{ appResult.gratingWeight.galvanized }} + Kg/m2 +

+
@@ -347,7 +378,9 @@ export default { crossBarPitch: '', clearSpan: '', bearingBarThickness: '', + crossBarThickness: '', bearingBarHeight: '', + crossBarHeight: '', locale: this.$route.params.lang }, calculationValues: null, @@ -417,7 +450,9 @@ export default { }, waiting() { setTimeout(() => { - this.$gsap.to($('.app .appResult'), {opacity: 1, minHeight: 145, height: 'auto', paddingTop: 30, paddingBottom: 30, duration: 0.5}) + this.$gsap.timeline() + .to($('.app .appResult,.app .weight'), {opacity: 1, paddingTop: 20, paddingBottom: 20, duration: 0.2}) + .to($('.app .appResult p,.app .weight p'), {opacity: 1, fontSize: 16, letterSpacing: 0, duration: 0.2}, 0) }, 100) } }, @@ -427,22 +462,32 @@ export default { this.validation = {} this.waiting = true this.appResult = null - this.$axios.post('/api/public/calculate', this.app) - .then(res => { - this.waiting = false - this.appResult = res.data - }) - .catch(err => { - this.waiting = false - if (err.response.status === 422) this.validation = err.response.data.validation - }) + setTimeout(() => { + this.$axios.post('/api/public/calculate', this.app) + .then(res => { + this.waiting = false + this.appResult = res.data + }) + .catch(err => { + this.waiting = false + if (err.response.status === 422) this.validation = err.response.data.validation + }) + }, 2000) } }, head() { return { htmlAttrs: { title: this.staticData.hero - } + }, + title: this.staticData.hero, + meta: [ + { + hid: 'description', + name: 'description', + content: this.staticData.app.t2 + } + ] } }, async asyncData({$axios}) { diff --git a/store/global.js b/store/global.js index b717d60..478e52e 100644 --- a/store/global.js +++ b/store/global.js @@ -8,7 +8,7 @@ export const state = () => ({ fa: 'استان مرکزی، اراک، شهرک قطب صنعتی، خیابان تلاش، همت 6، توسعه 3', en: 'No.3 Tose-e St., No.6 Hemmat St., Industrial Pole District, Arak City, Markazi Province, Iran' }, - instagram_url: 'https://instagram.com/arakrail_grating', + instagram_url: 'https://www.instagram.com/arakrail_grating', linkedin_url: 'https://www.linkedin.com/in/arak-rail-co-27040937', meta_description: { fa: 'شرکت اراک ریل در تاریخ ۱۳۷۰/۰۳/۲۹ با هدف تولید بخشی از قطعات و مجموعه های وارداتی مورد مصرف در صنایع ایران به خصوص راه آهن ، با مجوز وزارت صنایع ، تاسیس و در مساحت حدود ۶۰۰۰ متر مربع و با بیش از ۱۵۰۰ متر مربع کارگاه با مجموعه ای از امکانات ماشین کاری ، برش کاری ، پرس کاری و جوش کاری راه اندازی شد .شرکت اراک ریل مفتخر است که از سال ۱۳۸۵ برای اولین بار در کشور ...', diff --git a/store/staticData.js b/store/staticData.js index dcfe39a..2ad5707 100644 --- a/store/staticData.js +++ b/store/staticData.js @@ -732,7 +732,11 @@ export const state = () => ({ t26: 'دهنه باربر (mm)', t27: 'ضخامت تسمه های باربر (mm)', t28: 'ارتفاع تسمه های باربر (mm)', - t29: 'ابتدا گام تسمه رابط را انتخاب کنید' + t29: 'ابتدا گام تسمه رابط را انتخاب کنید', + t30: 'ضخامت تسمه های رابط (mm)', + t31: 'ارتفاع تسمه های رابط (mm)', + t32: 'وزن یک متر مربع گريتينگ بدون گالوانيزه: ', + t33: 'وزن یک متر مربع گريتينگ گالوانيزه شده: ' }, table1: { title: 'کلاس های مختلف بارگزاری (UNI 11002/2009)', @@ -741,7 +745,7 @@ export const state = () => ({ class1: { t1: 'کلاس 1', t2: '(DM 14-01-2008 - 3.1.4) عابر پیاده', - t3: 'جمعیت جمع و جور', + t3: 'جمعیت فشرده', }, class2: { t1: 'کلاس 2', @@ -833,7 +837,11 @@ export const state = () => ({ t26: 'Clear Span (mm)', t27: 'Bearing Bar Thickness (mm)', t28: 'Bearing Bar Height (mm)', - t29: 'First select Cross Bar Pitch' + t29: 'First select Cross Bar Pitch', + t30: 'Cross Bar Thickness (mm)', + t31: 'Cross Bar Height (mm)', + t32: 'Weight of one square meter of not-galvanized grating: ', + t33: 'Weight of one square meter of galvanized grating: ' }, table1: { title: 'TYPES OF LOADING CLASS UNI 11002/2009',