Browse Source

ssee also #110

ali 3 năm trước cách đây
mục cha
commit
f97752be04

+ 2 - 2
package.json

@@ -50,11 +50,11 @@
     "postcss-rtlcss": "^4.0.4",
     "process": "^0.11.10",
     "quasar": "^2.12.0",
-    "quasar-app-extension-q-page-builder": "^0.1.51",
+    "quasar-app-extension-q-page-builder": "^0.1.62",
     "quasar-crud": "^0.3.53",
     "quasar-form-builder": "^0.1.110",
     "quasar-template-builder": "^1.0.23",
-    "quasar-ui-q-page-builder": "^0.1.51",
+    "quasar-ui-q-page-builder": "^0.1.62",
     "socket.io-client": "^4.6.1",
     "sticky-sidebar-v2": "^1.1.1",
     "video.js": "^8.3.0",

+ 19 - 0
src/api/models/Payment.js

@@ -7,6 +7,7 @@ export default class PaymentAPI extends APIRepository {
     super('invoice', appApi)
     this.APIAdresses = {
       base: '/accounting/payments',
+      requestWithdraw: '/accounting/payments/request_withdraw',
       byId: (id) => '/accounting/payments/' + id
     }
     this.CacheList = {
@@ -52,4 +53,22 @@ export default class PaymentAPI extends APIRepository {
       }
     })
   }
+
+  requestWithdraw(data) {
+    return this.sendRequest({
+      apiMethod: 'put',
+      api: this.api,
+      request: this.APIAdresses.requestWithdraw,
+      data: this.getNormalizedSendData({
+        IBAN: null, // String
+        amount: null // Number
+      }, data),
+      resolveCallback: (response) => {
+        return new Payment(response.data)
+      },
+      rejectCallback: (error) => {
+        return error
+      }
+    })
+  }
 }

+ 73 - 7
src/components/Widgets/Wallet/MyWallet/MyWallet.vue

@@ -36,12 +36,49 @@
                      color="primary"
                      :loading="wallet.loading"
                      @click="deposit">
-                <q-icon name="isax:add" />
+                <q-icon name="add_circle_outline"
+                        class="q-mr-sm" />
                 افزایش موجودی
               </q-btn>
             </div>
           </div>
         </div>
+        <div class="withdraw-section q-mt-md">
+          <div class="row q-col-gutter-sm">
+            <div class="col-md-5 col-12">
+              <div class="title-of-input">
+                <div>
+                  برداشت از کیف پول
+                </div>
+                <q-btn flat
+                       color="primary"
+                       @click="setWithdrawAmountForAll">
+                  برداشت همه
+                </q-btn>
+              </div>
+              <q-input v-model="withdrawAmount"
+                       dense
+                       placeholder="لطفا مبلغ مورد نظر خود را مشخص کنید" />
+            </div>
+            <div class="col-md-4 col-12">
+              <div class="title-of-input">شماره شبا</div>
+              <q-input v-model="shabaNumber"
+                       dense
+                       placeholder="شماره شبای خود را وارد نمایید" />
+            </div>
+            <div class="col-md-3 col-12">
+              <q-btn class="btn-withdraw"
+                     color="red"
+                     outline
+                     :loading="wallet.loading"
+                     @click="withdraw">
+                <q-icon name="remove_circle_outline"
+                        class="q-mr-sm" />
+                برداشت از حساب
+              </q-btn>
+            </div>
+          </div>
+        </div>
       </div>
     </div>
   </div>
@@ -60,6 +97,8 @@ export default {
     return {
       user: new User(),
       wallet: new Wallet(),
+      shabaNumber: null,
+      withdrawAmount: null,
       depositAmount: null
     }
   },
@@ -94,6 +133,24 @@ export default {
         .catch(() => {
           this.wallet.loading = false
         })
+    },
+    withdraw () {
+      if (isNaN(this.withdrawAmount) || this.withdrawAmount === 0) {
+        return
+      }
+      this.wallet.loading = true
+      APIGateway.payment.requestWithdraw({ IBAN: this.shabaNumber, amount: this.withdrawAmount })
+        .then(() => {
+          this.shabaNumber = null
+          this.withdrawAmount = null
+          this.getMyWallet()
+        })
+        .catch(() => {
+          this.wallet.loading = false
+        })
+    },
+    setWithdrawAmountForAll () {
+      this.withdrawAmount = this.wallet.inventory
     }
   }
 }
@@ -122,12 +179,10 @@ export default {
     flex-wrap: wrap;
     justify-content: flex-start;
     align-items: center;
-    padding: 45px 58px;
-    @media screen and (max-width: 1024px) {
-      padding: 45px 16px;
-    }
+    padding: 45px 16px;
+    $cardColumn: 380px;
     .card-column {
-      width: 427px;
+      width: $cardColumn;
       @media screen and (max-width: 1024px) {
         width: 100%;
       }
@@ -174,7 +229,7 @@ export default {
       }
     }
     .actions-column {
-      width: calc( 100% - 427px);
+      width: calc( 100% - #{$cardColumn} );
       @media screen and (max-width: 1024px) {
         width: 100%;
         margin-top: 32px;
@@ -184,6 +239,17 @@ export default {
           margin-top: 25px;
         }
       }
+      .withdraw-section {
+        .title-of-input {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          height: 32px;
+        }
+        .btn-withdraw {
+          margin-top: 35px;
+        }
+      }
     }
   }
 }

+ 23 - 33
src/models/Payment.js

@@ -34,40 +34,30 @@ class Payment extends Model {
       { key: 'last_modification_time' },
       { key: 'is_active' },
       { key: 'is_deleted' }
-    ])
-
-    this.typeEnums = [
-      {
-        label: 'برداشت',
-        value: 'WITHDRAW'
-      },
-      {
-        label: 'درخواست برداشت',
-        value: 'WITHDRAW_REQUEST'
-      },
-      {
-        label: 'برداشت رد شده',
-        value: 'WITHDRAW_REJECT'
-      },
-      {
-        label: 'واریز',
-        value: 'DEPOSIT'
-      }
-    ]
-
-    this.loadTypeInfo()
-  }
-
-  loadTypeInfo () {
-    const target = this.typeEnums.find(type => type.value === this.type)
-    if (!target) {
-      this.type_info = {
-        label: null,
-        value: null
+    ], {
+      type: {
+        infoKey: 'type_info',
+        enumListKey: 'typeEnums',
+        enums: [
+          {
+            label: 'برداشت',
+            value: 'WITHDRAW'
+          },
+          {
+            label: 'درخواست برداشت',
+            value: 'WITHDRAW_REQUEST'
+          },
+          {
+            label: 'برداشت رد شده',
+            value: 'WITHDRAW_REJECT'
+          },
+          {
+            label: 'واریز',
+            value: 'DEPOSIT'
+          }
+        ]
       }
-    } else {
-      this.type_info = target
-    }
+    })
   }
 }
 

+ 9 - 9
yarn.lock

@@ -5399,12 +5399,12 @@ qs@6.11.0:
   dependencies:
     side-channel "^1.0.4"
 
-quasar-app-extension-q-page-builder@^0.1.51:
-  version "0.1.51"
-  resolved "https://registry.yarnpkg.com/quasar-app-extension-q-page-builder/-/quasar-app-extension-q-page-builder-0.1.51.tgz#f6307e086243b522db7ae0eed6a6d41dd56f8aec"
-  integrity sha512-RYVS9/IMtR8f6zrZpt0xUo9qgFaYSAwRJtWPQ1WvWndYcPBbvtfeoeqFAexBBCS/dgNizZPlY95diCjNXj2aDw==
+quasar-app-extension-q-page-builder@^0.1.62:
+  version "0.1.62"
+  resolved "https://registry.yarnpkg.com/quasar-app-extension-q-page-builder/-/quasar-app-extension-q-page-builder-0.1.62.tgz#5f9b7c6d0af3076da0ce683b0dc7b9b17b67edf2"
+  integrity sha512-AmeeM+9F7125RTEcDi7/5fYP9S5msJX2707N67U5P3IPQXwoJEfyqFwyyz+0slEmX9rvH9WIevUubSvqDoewOg==
   dependencies:
-    quasar-ui-q-page-builder "^0.1.51"
+    quasar-ui-q-page-builder "^0.1.62"
 
 quasar-crud@^0.3.53:
   version "0.3.53"
@@ -5441,10 +5441,10 @@ quasar-template-builder@^1.0.23:
     vue "^3.2.47"
     vuex "^4.1.0"
 
-quasar-ui-q-page-builder@^0.1.51:
-  version "0.1.51"
-  resolved "https://registry.yarnpkg.com/quasar-ui-q-page-builder/-/quasar-ui-q-page-builder-0.1.51.tgz#c085d380abd587279830f6d748427f71f4f250b8"
-  integrity sha512-1eYO6nXPMP2zw/rzPg5ckxSSZu5zxw/jeDcbcFwGrZizU3P2gxDqi7zEO/sNHAuQZjVzf47+4L1HWASJphYNpg==
+quasar-ui-q-page-builder@^0.1.62:
+  version "0.1.62"
+  resolved "https://registry.yarnpkg.com/quasar-ui-q-page-builder/-/quasar-ui-q-page-builder-0.1.62.tgz#67a4a408add4690b1e6f6a65452cd333747fd50c"
+  integrity sha512-Pbp3C4gd9Sy0A8M+EjcBJgDC3uI+/m9jiKwUvoyvO/sUwgsR8z9g3LePIwwKMd3A6MpZCfsicMYVZP+7jX6A+w==
   dependencies:
     "@quasar/extras" "^1.16.1"
     "@vue/compiler-sfc" "^3.2.47"