dec.vue 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. <template>
  2. <div v-loading="loading">
  3. <div class="white-box">
  4. <el-form ref="form" label-width="180px" class="form-page">
  5. <div class="hr-tip"><span>Account Information<!--账号信息--></span></div>
  6. <el-form-item label="New member code"><!--会员编号-->
  7. <el-input v-model="form.insertUserName"></el-input>
  8. </el-form-item>
  9. <el-form-item>
  10. <template slot="label">
  11. Entry level<!--实时报单级别-->
  12. </template>
  13. <el-select v-model="form.decLv" placeholder="Select entry level" @change="selectOne($event)">
  14. <el-option v-for="(item,index) in allDecLevel" :key="index" :label="item.LEVEL_NAME"
  15. :value="item.ID"></el-option>
  16. </el-select><!--请选择报单级别-->
  17. </el-form-item>
  18. <el-form-item label="Stockist Code"><!--报单中心编号-->
  19. <el-input v-model="form.decUserName" readonly></el-input>
  20. </el-form-item>
  21. <el-form-item>
  22. <template slot="label">
  23. Select Welcome Pack<!--报单方式二选一-->
  24. </template>
  25. <el-tabs type="border-card" v-model="decWay" style="position: relative;width: 1200px;">
  26. <!-- <el-tab-pane name="1">-->
  27. <!-- <span slot="label">Welcome Pack</span>&lt;!&ndash;报单级别套餐&ndash;&gt;-->
  28. <!-- <el-table class="table-box" :data="_tableData" stripe style="width: 100%;" highlight-current-row @current-change="handleCurrentChange">-->
  29. <!-- <el-table-column-->
  30. <!-- type="index"-->
  31. <!-- width="50">-->
  32. <!-- </el-table-column>-->
  33. <!-- <el-table-column label=" " width="50">-->
  34. <!-- <template slot-scope="scope">-->
  35. <!-- <span class="el-checkbox__input" :class="{'is-checked':scope && scope.row && currentRow && scope.row.ID==currentRow.ID}">-->
  36. <!-- <span class="el-checkbox__inner">-->
  37. <!-- </span>-->
  38. <!-- <input type="checkbox" aria-hidden="false" class="el-checkbox__original" value="">-->
  39. <!-- </span>-->
  40. <!-- </template>-->
  41. <!-- </el-table-column>-->
  42. <!-- <el-table-column label="Package Name" prop="PACKAGE_NAME" width="300">&lt;!&ndash; 套餐名称 &ndash;&gt;-->
  43. <!-- </el-table-column>-->
  44. <!-- <el-table-column label="Price" prop="AMOUNT" width="100">&lt;!&ndash; 套餐金额 &ndash;&gt;-->
  45. <!-- </el-table-column>-->
  46. <!-- <el-table-column label="BV" prop="PV" width="100">&lt;!&ndash; 套餐PV &ndash;&gt;-->
  47. <!-- <template>-->
  48. <!-- </template>-->
  49. <!-- </el-table-column>-->
  50. <!-- <el-table-column label="Entry level" prop="LEVEL_NAME" width="100">&lt;!&ndash; 所属报单级别 &ndash;&gt;-->
  51. <!-- <template>-->
  52. <!-- </template>-->
  53. <!-- </el-table-column>-->
  54. <!-- <el-table-column label="Details" prop="PACKAGE_CONTENT" width="">&lt;!&ndash; 套餐内容 &ndash;&gt;-->
  55. <!-- <template >-->
  56. <!-- </template>-->
  57. <!-- </el-table-column>-->
  58. <!-- </el-table>-->
  59. <!-- &lt;!&ndash; <el-form-item>-->
  60. <!-- <el-button type="primary" @click="onclock" :loading="submitButton">保存</el-button>-->
  61. <!-- </el-form-item>&ndash;&gt;-->
  62. <!-- </el-tab-pane>-->
  63. <el-tab-pane label="Product" name="2"><!-- 商品报单 -->
  64. <el-table class="table-box" v-if="numList.length > 0" :data="tableDatas" stripe style="width: 100%;" highlight-current-row @selection-change="handleSelectionChange">
  65. <el-table-column
  66. type="selection"
  67. width="55">
  68. </el-table-column>
  69. <el-table-column label="Product Name" prop="GOODS_NAME" width="300"><!-- 商品名称 -->
  70. </el-table-column>
  71. <el-table-column label="Product code" prop="GOODS_NO" width="120"><!-- 商品编号 -->
  72. </el-table-column>
  73. <el-table-column label="Product price" prop="SELL_PRICE" width="120"><!-- 卖价 -->
  74. </el-table-column>
  75. <el-table-column label="Product BV" prop="PRICE_PV" width="100"><!-- BV价格 -->
  76. </el-table-column>
  77. <el-table-column label="Tax rate" prop="TAX_RATE" width="100">
  78. <template slot-scope="scope">
  79. {{ Math.round(scope.row.TAX_RATE * 100) / 100 }}
  80. </template>
  81. </el-table-column>
  82. <el-table-column label="Tax" width="100">
  83. <template slot-scope="scope">
  84. {{ Math.round((scope.row.SELL_PRICE - scope.row.SELL_PRICE / (1 + scope.row.TAX_RATE / 100)) * 100) / 100 }}
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="Quantity" width="150"><!-- 数量 -->
  88. <template slot-scope="scope">
  89. <el-input-number size="mini" v-model="numList[scope.$index]" :min="0" :max="Number(scope.row.STORE_NUMS)" @change="value=>{handleChange(value,scope.row.ID)}"></el-input-number>
  90. </template>
  91. <!-- <template slot-scope="scope">
  92. <el-input-number v-if="form.goodsId.some(item=>item==scope.row.ID)" v-model='scope.row.goodsNum' @change="value=>{handleChange(value,scope.row.ID)}" controls-position="right" style="width: 70px;" size="mini"></el-input-number>
  93. </template> -->
  94. </el-table-column>
  95. </el-table>
  96. <div class="white-box-footer flex">
  97. <el-button @click="getSum()">Total Calculation</el-button><!--计算合计-->
  98. <div class='flex data' style="flex:1;justify-content: flex-end;">
  99. <div style="margin-right:2rem">Price:₦{{sell_price_sum}}</div><!--商品价格-->
  100. <div style="margin-right:2rem">BV:{{price_pv_sum}}</div><!--商品BV-->
  101. <div>Tax:₦{{tax_sum}}</div><!--商品BV-->
  102. </div>
  103. </div>
  104. </el-tab-pane>
  105. </el-tabs>
  106. </el-form-item>
  107. <div class="hr-tip"><span>Network Information</span></div><!--网络信息-->
  108. <el-form-item label="Sponsor code"><!--推荐人编号-->
  109. <el-input v-model="form.recUserName" @change="handleChkRecUser">
  110. <template slot="append">【{{recRealName}}】</template>
  111. </el-input>
  112. </el-form-item>
  113. <el-form-item label="Placement code"><!--接点人编号-->
  114. <el-input v-model="form.conUserName" @change="handleChkConUser">
  115. <template slot="append">【{{conRealName}}】</template>
  116. </el-input>
  117. </el-form-item>
  118. <el-form-item label="Placement tree"><!--安置区位-->
  119. <el-radio-group v-model="form.location">
  120. <el-radio-button :label="1">Left</el-radio-button><!--左区-->
  121. <el-radio-button :label="2">Right</el-radio-button><!--中区-->
  122. <!-- <el-radio-button :label="3">Right</el-radio-button> --><!--右区-->
  123. </el-radio-group>
  124. </el-form-item>
  125. <div class="hr-tip"><span>Personal Information<!--个人信息--></span></div>
  126. <el-form-item>
  127. <template slot="label">
  128. Member Name<!-- 会员姓名 -->
  129. </template>
  130. <el-input v-model="form.realName"></el-input>
  131. </el-form-item>
  132. <el-form-item>
  133. <template slot="label">
  134. Phone Number<!-- 会员手机 -->
  135. </template>
  136. <el-input v-model="form.mobile"></el-input>
  137. </el-form-item>
  138. <el-form-item>
  139. <template slot="label">
  140. Email
  141. </template>
  142. <el-input v-model="form.email"></el-input>
  143. </el-form-item>
  144. <!-- <el-form-item>-->
  145. <!-- <template slot="label">-->
  146. <!-- Identity No.&lt;!&ndash; 身份证号 &ndash;&gt;-->
  147. <!-- </template>-->
  148. <!-- <el-input v-model="form.insertUserIdCard" maxlength="18"></el-input>-->
  149. <!-- </el-form-item>-->
  150. <el-form-item>
  151. <template slot="label">
  152. Login Password<!-- 登录密码 -->
  153. </template>
  154. <el-input v-model="form.password" maxlength="32" placeholder="Enter password"></el-input>
  155. </el-form-item>
  156. <el-form-item>
  157. <template slot="label">
  158. Payment Password<!-- 支付密码 -->
  159. </template>
  160. <el-input v-model="form.payPassword" maxlength="32" placeholder="Enter Payment password"></el-input>
  161. </el-form-item>
  162. <el-form-item>
  163. <template slot="label">
  164. Recipient Name<!-- 收货人 -->
  165. </template>
  166. <el-input v-model="form.consignee"></el-input>
  167. </el-form-item>
  168. <el-form-item>
  169. <template slot="label">
  170. Phone Number<!-- 收货人手机 -->
  171. </template>
  172. <el-input v-model="form.acceptMobile"></el-input>
  173. </el-form-item>
  174. <el-form-item>
  175. <template slot="label">
  176. Shipping<!-- 收货方式 -->
  177. </template>
  178. <el-radio-group v-model="form.way" @change="wayChange">
  179. <el-radio label="express">Delivery</el-radio>
  180. <el-radio label="pickup">Self Pick-up<!--自提--></el-radio>
  181. </el-radio-group>
  182. </el-form-item>
  183. <el-form-item prop="areaSelected">
  184. <template slot="label">
  185. State<!-- 地区 -->
  186. </template>
  187. <el-cascader
  188. :disabled="areaDisabled"
  189. size="large"
  190. :options="regionData"
  191. v-model="form.areaSelected">
  192. </el-cascader>
  193. </el-form-item>
  194. <el-form-item>
  195. <template slot="label">
  196. Full address<!-- 详细地址 -->
  197. </template>
  198. <el-input :disabled="addressDisabled" v-model="form.address"></el-input>
  199. </el-form-item>
  200. <el-form-item>
  201. <template slot="label">
  202. City<!-- 详细地址 -->
  203. </template>
  204. <el-input :disabled="addressDisabled" v-model="form.cityName"></el-input>
  205. </el-form-item>
  206. <el-form-item>
  207. <template slot="label">
  208. Local Government Area<!-- 详细地址 -->
  209. </template>
  210. <el-input :disabled="addressDisabled" v-model="form.lgaName"></el-input>
  211. </el-form-item>
  212. <div class="hr-tip"><span>Bank Info<!-- 银行信息 --></span></div>
  213. <el-form-item label="Bank Name"><!-- 开户行 -->
  214. <el-select v-model="form.openBank" placeholder="Select Bank"><!-- 请选择开户行 -->
  215. <el-option v-for="(item,index) in allOpenBank" :key="index" :label="item.BANK_NAME"
  216. :value="item.BANK_CODE"></el-option>
  217. </el-select>
  218. </el-form-item>
  219. <el-form-item label="Account Name"><!-- 开户支行 -->
  220. <el-input v-model="form.bankAddress"></el-input>
  221. </el-form-item>
  222. <el-form-item label="Account Number"><!-- 银行账号 -->
  223. <el-input v-model="form.bankNo" maxlength="19"></el-input>
  224. </el-form-item>
  225. <div class="hr-tip"><span>Pay Info<!-- 支付信息 --></span></div>
  226. <el-form-item label="Payment method" required><!-- 支付方式 -->
  227. <el-radio-group v-model="form.payType" @change="payMethodChange">
  228. <el-radio v-for="(item, index) in payList" :key='index' :label="item.label">{{ item.name }}</el-radio>
  229. </el-radio-group>
  230. </el-form-item>
  231. <el-form-item>
  232. <el-button type="primary" @click="onSubmit" :loading="submitButtonStat">Save<!-- 保存 --></el-button>
  233. </el-form-item>
  234. </el-form>
  235. </div>
  236. <el-dialog title="Pay" v-if="visible" :visible.sync="visible" width="30%" v-loading="payStackLoading" :before-close="handleClose">
  237. <section>
  238. <div class="formcontainer">
  239. <el-divider></el-divider>
  240. <div class="container">
  241. <el-form :model="PayStackForm">
  242. <el-form-item label="Email" label-width="100px" required>
  243. <el-input v-model="PayStackForm.email" autocomplete="off"></el-input>
  244. </el-form-item>
  245. <el-form-item label="Amount" label-width="100px" required>
  246. <el-input v-model="PayStackForm.amount" autocomplete="off" readonly></el-input>
  247. </el-form-item>
  248. </el-form>
  249. </div>
  250. </div>
  251. </section>
  252. <paystack
  253. :firstname="PayStackForm.firstname"
  254. :lastname="PayStackForm.lastname"
  255. :amount="PayStackForm.amount * 100"
  256. :email="PayStackForm.email"
  257. :metadata="PayStackForm.metadata"
  258. :currency="PayStackForm.currency"
  259. :paystackkey="PayStackForm.publicKey"
  260. :reference="reference"
  261. :channels="channels"
  262. :callback="processPayment"
  263. :close="processClose"
  264. >
  265. <el-button type="primary" size="small">Pay</el-button>
  266. </paystack>
  267. <el-button type="danger" size="small" class="cancelButton" @click="handleClose">Cancel</el-button>
  268. </el-dialog>
  269. <el-dialog title="Tips" :visible.sync="payDialog" :show-close="false" width="350px" :close="handleOrderList">
  270. <el-result icon="success" title="the order is successful">
  271. <template slot="extra">
  272. <span style="color: #008efa; font-size: 30px;">{{ countdown }}</span>
  273. </template>
  274. </el-result>
  275. </el-dialog>
  276. </div>
  277. </template>
  278. <script>
  279. import Vue from 'vue'
  280. import network from '@/utils/network'
  281. import baseInfo from '@/utils/baseInfo'
  282. import store from '@/utils/vuexStore'
  283. import tool from '@/utils/tool'
  284. import userInfo from '@/utils/userInfo'
  285. import { PAY_STACK_PUBLIC_KEY, PAY_STACK_CURRENCY } from '@/utils/config'
  286. import paystack from 'vue-paystack'
  287. export default {
  288. name: 'user_dec',
  289. async created() {
  290. await this.getData()
  291. },
  292. computed:{
  293. _tableData(){
  294. if(this.tableData==null){
  295. return [];
  296. }
  297. if(this.form.decLv==''){
  298. return this.tableData;
  299. }
  300. return this.tableData.filter(item=>{
  301. return item.LEVEL_ID == this.form.decLv
  302. })
  303. },
  304. reference() {
  305. let text = "";
  306. let possible =
  307. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  308. for (let i = 0; i < 10; i++)
  309. text += possible.charAt(Math.floor(Math.random() * possible.length));
  310. return text;
  311. }
  312. },
  313. data() {
  314. return {
  315. currentRow:null,
  316. decWay:'2',
  317. regionData: store.state.regionInfo.regionData,
  318. form: {
  319. realName:'',
  320. decLv: '',
  321. insertUserName:'',
  322. decUserName: userInfo.userName(),
  323. recUserName:'',
  324. conUserName:'',
  325. insertUserIdCard:'',
  326. consignee:'',
  327. acceptMobile:'',
  328. areaSelected: [],
  329. address: '',
  330. openBank:'',
  331. bankAddress: '',
  332. bankProvince: '',
  333. bankCity: '',
  334. bankCounty: '',
  335. bankNo: '',
  336. bankAreaSelected: [],
  337. password:'111111',
  338. payPassword:'111111',
  339. mobile:'',
  340. email:'',
  341. packageId:'',
  342. goodsId:[],
  343. goodsNum:[],
  344. province:'',
  345. cityName:'',
  346. lgaName:'',
  347. way:"express",
  348. payType: '',
  349. },
  350. conRealName: '-',
  351. recRealName: '-',
  352. num: 1,
  353. tableData:null,
  354. tableDatas:null,
  355. allOpenBank: null,
  356. allDecPackage:{},
  357. allDecLevel: baseInfo.decLevels(),
  358. loading: false,
  359. submitButtonStat: false,
  360. submitButton:false,
  361. allGoods:[],
  362. multipleSelection: [],
  363. goodsNums:[],
  364. numList: [],
  365. sell_price_sum:0.00,
  366. price_pv_sum:0.00,
  367. tax_sum:0.00,
  368. areaDisabled: false,
  369. addressDisabled: false,
  370. category_type: '',
  371. payList: [],
  372. sn: '',
  373. payDialog: false,
  374. countdown: 5,
  375. visible: false,
  376. payStackLoading: false,
  377. channels: ["card", "bank", "ussd", "qr"], // eft(南非) mobile_money(加纳)
  378. PayStackForm: {
  379. publicKey: PAY_STACK_PUBLIC_KEY,
  380. currency: PAY_STACK_CURRENCY,
  381. firstname: userInfo.userName(),
  382. lastname: '',
  383. email: userInfo.userEmail(),
  384. amount: 0, // kobo
  385. orderSn: '',
  386. metadata: {
  387. cart_id: this.sn,
  388. custom_fields: [
  389. {
  390. display_name: 'orderSn',
  391. variable_name: 'orderSn',
  392. value: this.sn
  393. },
  394. ]
  395. },
  396. },
  397. }
  398. },
  399. components: {
  400. paystack
  401. },
  402. methods: {
  403. wayChange(){
  404. if(this.form.way==='pickup'){
  405. this.areaDisabled = true
  406. this.addressDisabled = true
  407. }else{
  408. this.areaDisabled = false
  409. this.addressDisabled = false
  410. }
  411. },
  412. getSum(){
  413. let sell_price_sum=0,price_pv_sum=0,tax_sum=0;
  414. this.multipleSelection.map((item,index)=>{
  415. sell_price_sum+=Number(item.SELL_PRICE)*item.goodsNum;
  416. price_pv_sum+=Number(item.PRICE_PV)*item.goodsNum;
  417. tax_sum += Number(item.SELL_PRICE - item.SELL_PRICE / (1 + item.TAX_RATE / 100)) * item.goodsNum;
  418. })
  419. this.sell_price_sum=tool.formatPrice(sell_price_sum);
  420. this.price_pv_sum=tool.formatPrice(price_pv_sum);
  421. this.tax_sum = tool.formatPrice(tax_sum);
  422. },
  423. async getData () {
  424. await network.getData(`user/dec`).then(response => {
  425. this.loading = false;
  426. this.form.insertUserName = response.userName;
  427. this.allOpenBank = response.allOpenBank;
  428. this.allDecPackage = response.allDecPackage;
  429. this.allGoods = response.allGoods;
  430. this.categoryType = 1
  431. let settingObj=this.allDecPackage;
  432. let settingArr = Object.keys(settingObj).map(key => {
  433. //console.log(key); //为每个键名
  434. return settingObj[key]; //把每个对象返回出去生成一个新的数组中相当于0:{id:1}
  435. });
  436. this.tableData=settingArr;
  437. let settingObj1=this.allGoods;
  438. for(let i in settingObj1){
  439. this.numList[i] = 1;
  440. settingObj1[i].goodsNum= 1 ;
  441. }
  442. this.tableDatas=settingObj1;
  443. // this.tableDatas=this.allGoods.map(item=>{return {...item,goodsNum:1}});
  444. // 支付方式
  445. this.payList = response.sellType[0]['sell_type']
  446. // 支付方式的第一项默认选中
  447. this.form.payType = Object.values(this.payList)[0]['label']
  448. })
  449. },
  450. handleCurrentChange(val) {
  451. if(!val){return}
  452. this.currentRow = val;
  453. this.form.packageId=this.currentRow.ID;
  454. },
  455. // handleSelectionChange(val) {
  456. // this.multipleSelection = val;
  457. // this.form.goodsId = this.multipleSelection.map(item => item.ID)
  458. // this.form.goodsNum = this.multipleSelection.map(item=>{
  459. // return item.goodsNum
  460. // })
  461. // },
  462. handleSelectionChange(val) {
  463. let idx = -1,num;
  464. for(let i in this.tableDatas){
  465. for(let v in val){
  466. if(val[v].ID==this.tableDatas[i].ID){
  467. idx = i;
  468. num = this.numList[idx];
  469. val[v]["goodsNum"] = num;
  470. break;
  471. }
  472. }
  473. }
  474. this.multipleSelection = val;
  475. },
  476. handleChange(value,ID) {
  477. for(let i in this.multipleSelection){
  478. if(this.multipleSelection[i]['ID']==ID) {
  479. this.multipleSelection[i]["goodsNum"] = value;
  480. }
  481. }
  482. },
  483. getGoods(){
  484. this.form.goodsId=[];
  485. this.form.goodsNum=[];
  486. this.multipleSelection.map((item,index)=>{
  487. this.form.goodsId.push(item.ID)
  488. this.form.goodsNum.push(item.goodsNum)
  489. })
  490. },
  491. onSubmit() {
  492. let _this = this
  493. _this.getGoods();
  494. _this.submitButtonStat = true
  495. let path = 'user/dec'
  496. let postData = {
  497. consignee: _this.form.consignee,
  498. acceptMobile: _this.form.acceptMobile,
  499. province: _this.form.areaSelected[0] ? _this.form.areaSelected[0] : '',
  500. city: _this.form.areaSelected[1] ? _this.form.areaSelected[1] : '',
  501. county: _this.form.areaSelected[2] ? _this.form.areaSelected[2] : '',
  502. address: _this.form.address,
  503. insertUserName: _this.form.insertUserName,
  504. decLv: _this.form.decLv,
  505. realName: _this.form.realName,
  506. decUserName: _this.form.decUserName,
  507. conUserName: _this.form.conUserName,
  508. recUserName: _this.form.recUserName,
  509. insertUserIdCard: _this.form.insertUserIdCard,
  510. openBank: _this.form.openBank,
  511. bankAddress: _this.form.bankAddress,
  512. mobile: _this.form.mobile,
  513. email: _this.form.email,
  514. cityName: _this.form.cityName,
  515. lgaName: _this.form.lgaName,
  516. bankProvince: _this.form.bankAreaSelected[0] ? _this.form.bankAreaSelected[0] : '',
  517. bankCity: _this.form.bankAreaSelected[1] ? _this.form.bankAreaSelected[1] : '',
  518. bankCounty: _this.form.bankAreaSelected[2] ? _this.form.bankAreaSelected[2] : '',
  519. bankNo: _this.form.bankNo,
  520. password: _this.form.password,
  521. payPassword: _this.form.payPassword,
  522. packageId: _this.form.packageId,
  523. goodsId: _this.form.goodsId,
  524. goodsNum: _this.form.goodsNum,
  525. location: _this.form.location,
  526. decWay:_this.decWay,
  527. payType: _this.form.payType,
  528. }
  529. return network.postData(path, postData).then((response) => {
  530. // 非PayStack支付
  531. if (_this.form.payType !== 'pay_stack') {
  532. _this.$message({
  533. message: response,
  534. type: 'success'
  535. })
  536. _this.submitButtonStat = false
  537. _this.$router.push({path: `/shop/dec-order-list`})
  538. } else {
  539. // PayStack支付
  540. _this.submitButtonStat = false
  541. _this.PayStackForm.orderSn = response.SN
  542. _this.PayStackForm.amount = response.ORDER_AMOUNT
  543. _this.PayStackForm.metadata.custom_fields[0].value = response.SN
  544. _this.visible = true
  545. }
  546. }).catch(response => {
  547. _this.submitButtonStat = true
  548. _this.$message({
  549. message: response,
  550. type: 'error'
  551. })
  552. })
  553. },
  554. selectOne(event, item) {
  555. network.getData(`user/dec`).then(response => {
  556. })
  557. },
  558. handleChkConUser() {
  559. if (this.form.conUserName) {
  560. this.loading = true
  561. network.getData('user/full-info', {userName: this.form.conUserName}).then(response => {
  562. this.conRealName = response.REAL_NAME + response.isLocation
  563. this.loading = false
  564. }).catch(response => {
  565. this.conRealName = '-'
  566. this.loading = false
  567. })
  568. }
  569. },
  570. handleChkRecUser() {
  571. if (this.form.recUserName) {
  572. this.loading = true
  573. network.getData('user/full-info', {userName: this.form.recUserName}).then(response => {
  574. this.recRealName = response.REAL_NAME
  575. this.loading = false
  576. }).catch(response => {
  577. this.recRealName = '-'
  578. this.loading = false
  579. })
  580. }
  581. },
  582. // 切换支付方式
  583. payMethodChange(type) {
  584. this.form.payType = type
  585. },
  586. // 关闭支付回调
  587. handleClose() {
  588. let _this = this
  589. _this.$confirm('Confirm to close?').then(() => {
  590. return network.postData('shop/delete-approach-order', {orderSn: this.PayStackForm.orderSn}).then(() => {
  591. // 关闭支付模态框
  592. _this.visible = false
  593. })
  594. }).catch(() => {
  595. // 关闭支付模态框
  596. _this.visible = false
  597. })
  598. },
  599. // 支付成功回调
  600. processPayment(response) {
  601. // 关闭支付页面
  602. this.visible = false
  603. this.payStackLoading = false
  604. // 显示支付成功模态框
  605. this.payDialog = true
  606. this.handleCountdown()
  607. },
  608. // 关闭支付回调
  609. processClose() {
  610. // 关闭支付模态框
  611. this.visible = false
  612. },
  613. // 支付tips结束,跳转到报单列表
  614. handleOrderList() {
  615. this.$router.push({path: `/shop/dec-order-list`})
  616. },
  617. // 启动倒计时
  618. handleCountdown() {
  619. //创建定时器
  620. setInterval(() => {
  621. // 每隔1秒把time的值减一,赋值给span标签
  622. this.countdown--
  623. if (this.countdown === 0) {
  624. // 倒计时结束,跳转到报单列表
  625. this.$router.push({path: `/shop/dec-order-list`})
  626. }
  627. }, 1000)
  628. },
  629. }
  630. }
  631. </script>
  632. <style>
  633. .hr-tip {
  634. font-size: 12px;
  635. position: relative;
  636. text-align: center;
  637. height: 30px;
  638. line-height: 30px;
  639. color: #999;
  640. margin-bottom: 20px;
  641. }
  642. .hr-tip:before {
  643. content: '';
  644. display: block;
  645. position: absolute;
  646. left: 0;
  647. right: 0;
  648. top: 14px;
  649. border-bottom: 1px dashed #ddd;
  650. height: 1px;
  651. }
  652. .hr-tip span {
  653. display: inline-block;
  654. background: #fff;
  655. position: relative;
  656. padding: 0 10px;
  657. }
  658. .el-input-number--mini .el-input-number__decrease, .el-input-number--mini .el-input-number__increase{width: 22px!important}
  659. .el-input-number.is-controls-right .el-input__inner{padding-left: 10px;
  660. padding-right: 30px;}
  661. .el-tabs--border-card{
  662. position: relative;
  663. width: 600px;
  664. }
  665. .flex{
  666. display: flex;
  667. }
  668. .address{
  669. /* height: 3rem; */
  670. line-height: 3.5rem;
  671. }
  672. .address_box{
  673. border-bottom: 1px solid #e3e3e3;
  674. }
  675. .sum{
  676. display: inline-block;
  677. }
  678. .box{
  679. margin: 1rem 0;
  680. display: flex;
  681. justify-content: flex-start;
  682. align-items: center;
  683. padding-bottom: 1rem;
  684. }
  685. .sum_box{
  686. display: flex;
  687. margin-left: 1rem;
  688. }
  689. .sum_box > div{
  690. line-height: 2rem;
  691. }
  692. .sum_box > div:nth-child(1){
  693. margin-right: 1rem;
  694. }
  695. .payButton {
  696. border: none;
  697. padding: 0;
  698. }
  699. </style>