lex 2 years ago
parent
commit
d856a9ddd7

+ 5 - 10
package-lock.json

@@ -11493,8 +11493,7 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.0.1.tgz",
       "integrity": "sha512-wtdMnGVvys9K8tg+DxowU1ytTrdVveXr3LzdhaKakysgGXyrsfaeds2cDywtvujEASjWOwWL/OgWM+qoeM8Plg==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "@vitejs/plugin-vue-jsx": {
       "version": "1.3.8",
@@ -11778,8 +11777,7 @@
       "version": "5.3.1",
       "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
       "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "aggregate-error": {
       "version": "3.1.0",
@@ -15093,8 +15091,7 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-6.0.0.tgz",
       "integrity": "sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "postcss-value-parser": {
       "version": "4.2.0",
@@ -15295,8 +15292,7 @@
     "qrcode.vue": {
       "version": "3.3.3",
       "resolved": "https://registry.npmmirror.com/qrcode.vue/-/qrcode.vue-3.3.3.tgz",
-      "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw==",
-      "requires": {}
+      "integrity": "sha512-OsD4tQjIbxg/K6D5ZkWjBdYI9eg9K2i8qeYILdEAX5mdAydSAxV7xKmmZSP/hA12olLqEMZ9ryqDQrwa9jEMgw=="
     },
     "qs": {
       "version": "6.10.3",
@@ -16266,8 +16262,7 @@
     "vue-demi": {
       "version": "0.13.2",
       "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.2.tgz",
-      "integrity": "sha512-41ukrclEbMddAyP7PvxMSYqnOSzPV6r7GNnyTSKSCNTaz19GehxmTiXyP9kwHSUv2+Dr6hHqiUiF7L1VAw2KdQ==",
-      "requires": {}
+      "integrity": "sha512-41ukrclEbMddAyP7PvxMSYqnOSzPV6r7GNnyTSKSCNTaz19GehxmTiXyP9kwHSUv2+Dr6hHqiUiF7L1VAw2KdQ=="
     },
     "vue-echarts": {
       "version": "6.2.3",

+ 7 - 7
src/student/music-group/pre-apply/component/apply.tsx

@@ -54,7 +54,7 @@ export default defineComponent({
     })
     const forms = reactive({
       username: null,
-      sex: null,
+      sex: null as any,
       currentGrade: null,
       currentGradeTxt: null, // 年级编号
       currentClass: '', // 班级
@@ -72,6 +72,8 @@ export default defineComponent({
           '/api-student/orchestraRegister/register/' + route.query.id
         )
         const detail = data || {}
+
+        console.log(detail, 'detail')
         state.detail = detail
 
         const grade: any = state.currentGrade.find((item: any) => item.value == detail.currentGrade)
@@ -80,7 +82,7 @@ export default defineComponent({
           (item: any) => item.value == detail.registerSubjectId
         )
         forms.username = detail.username
-        forms.sex = detail.sex
+        forms.sex = detail.sex ? 1 : 0
         forms.currentGrade = detail.currentGrade
         forms.currentGradeTxt = grade.text
         forms.currentClass = detail.currentClass
@@ -162,15 +164,13 @@ export default defineComponent({
       }
     }
 
-    onMounted(() => {
-      studentRegister()
-
-      getSubjects()
-
+    onMounted(async () => {
+      await getSubjects()
       // 判断学年制
       if (props.schoolSystem === 'sixYearSystem') {
         state.currentGrade.push({ text: '六年级', value: 6 })
       }
+      await studentRegister()
     })
     return () => (
       <>

+ 134 - 3
src/student/music-group/pre-apply/component/order.tsx

@@ -1,7 +1,20 @@
 import OEmpty from '@/components/o-empty'
 import { orderStatus } from '@/constant'
 import { moneyFormat } from '@/helpers/utils'
-import { Button, Cell, CellGroup, Grid, GridItem, Image, List } from 'vant'
+import {
+  Button,
+  Cell,
+  CellGroup,
+  Field,
+  Grid,
+  GridItem,
+  Image,
+  List,
+  Popup,
+  Radio,
+  RadioGroup,
+  showToast
+} from 'vant'
 import { defineComponent, onMounted, reactive, ref } from 'vue'
 import { useRoute } from 'vue-router'
 import request from '../../request-music'
@@ -23,7 +36,12 @@ export default defineComponent({
       params: {
         page: 1,
         rows: 20
-      }
+      },
+      resionList: [] as any,
+      refundStatus: false,
+      resion: null,
+      refundSelect: {} as any,
+      checked: null as any
     })
 
     // userPaymentOrder/page
@@ -34,7 +52,8 @@ export default defineComponent({
         const res = await request.post('/api-student/userPaymentOrder/page', {
           data: {
             ...form.params,
-            bizId: route.query.id
+            bizId: route.query.id,
+            goodsQuery: true
           }
         })
         form.listState.loading = false
@@ -61,7 +80,50 @@ export default defineComponent({
       }
     }
 
+    const getDefaultParams = async () => {
+      try {
+        const { data } = await request.get('/api-student/sysParamConfig/queryByParamName', {
+          params: {
+            paramName: 'refund_reason'
+          }
+        })
+
+        form.resionList = data.paramValue.split('\n')
+        form.resionList.push('其它原因')
+        // console.log(form.resionList, 'resionList')
+      } catch {
+        //
+      }
+    }
+
+    // 确认退费
+    const onConfirmRefund = async () => {
+      try {
+        const status = form.checked === form.resionList.length - 1 && form.resion
+        if (form.checked) {
+          showToast('请选择原因')
+          return
+        } else if (status) {
+          showToast('请输入原因')
+          return
+        }
+        console.log({
+          merOrderNo: form.refundSelect.orderNo,
+          refundReason: status ? form.resion : form.resionList[form.checked]
+        })
+        await request.post('/api-student/userPaymentOrder/refundPayment', {
+          data: {
+            merOrderNo: form.refundSelect.orderNo,
+            refundReason: status ? form.resion : form.resionList[form.checked]
+          }
+        })
+      } catch {
+        //
+      }
+    }
+
     onMounted(() => {
+      getDefaultParams()
       getList()
     })
 
@@ -121,6 +183,17 @@ export default defineComponent({
                             </Button>
                           </>
                         )} */}
+                        {/* 订单成功 订单金额大于0 */}
+                        {item.status === 'PAID' && item.paymentCashAmount > 0 && (
+                          <Button
+                            round
+                            plain
+                            color="#AAAAAA"
+                            onClick={() => (form.refundStatus = true)}
+                          >
+                            申请退款
+                          </Button>
+                        )}
                       </div>
                     )
                   }}
@@ -131,6 +204,64 @@ export default defineComponent({
         ) : (
           <OEmpty btnStatus={false} classImgSize="SMALL" tips="暂无订单" />
         )}
+
+        <Popup v-model:show={form.refundStatus} round style={{ width: '90%' }}>
+          <div class={styles.container}>
+            <div class={[styles.dialogTitle, styles.dialogRefund]}>
+              <i></i>
+              申请退款
+            </div>
+
+            <div class={styles.refundContent}>
+              <div class={styles.tips}>
+                您将要发起退款,退款需承担千分之六的手续费,确认退款后款项将原路返还到您的付款账户中。
+              </div>
+
+              <div class={styles.refundTitle}>
+                <span>*</span>请选择您的退款原因
+              </div>
+
+              <RadioGroup v-model={form.checked}>
+                {form.resionList &&
+                  form.resionList.map((item: any, index: number) => (
+                    <Cell style="padding: 16px 0;" onClick={() => (form.checked = index)}>
+                      {{
+                        icon: () => <Radio name={index} />,
+                        title: () => <span style={'padding-left: 6px'}>{item}</span>
+                      }}
+                    </Cell>
+                  ))}
+              </RadioGroup>
+              {form.checked === form.resionList.length - 1 && (
+                <Field
+                  class={styles.phoneName}
+                  v-model={form.resion}
+                  placeholder="请输入原因"
+                  maxlength={15}
+                  type="textarea"
+                  rows={2}
+                />
+              )}
+            </div>
+
+            <div class={['van-hairline--top van-dialog__footer']}>
+              <Button
+                onClick={onConfirmRefund}
+                class={['van-button van-button--default van-button--large van-dialog__cancel']}
+              >
+                确认退款
+              </Button>
+              <Button
+                onClick={() => (form.refundStatus = false)}
+                class={[
+                  'van-button van-button--default van-button--large van-dialog__confirm van-hairline--left'
+                ]}
+              >
+                取消
+              </Button>
+            </div>
+          </div>
+        </Popup>
       </div>
     )
   }

+ 36 - 0
src/student/music-group/pre-apply/index.module.less

@@ -291,3 +291,39 @@
   line-height: 25px;
   padding-bottom: 12px;
 }
+
+.dialogRefund {
+  padding: 20px 0 15px 25px;
+}
+.refundContent {
+  padding: 0 20px 25px;
+  .tips {
+    font-size: 15px;
+    color: #333333;
+    line-height: 21px;
+  }
+}
+.container {
+  :global {
+    .van-button {
+      font-size: 18px;
+      font-weight: 500;
+    }
+  }
+}
+
+.refundTitle {
+  padding-top: 25px;
+  font-size: 16px;
+  font-weight: 600;
+  color: #333333;
+  line-height: 22px;
+  span {
+    color: #f44541;
+  }
+}
+
+.phoneName {
+  background: #f2f2f2;
+  border-radius: 6px;
+}

+ 22 - 8
src/student/music-group/pre-apply/order-detail.tsx

@@ -65,13 +65,18 @@ export default defineComponent({
         // CLOSED: '订单关闭',
         // REFUNDING: '退款中',
         // REFUNDED: '已退款'
-        if (data.status !== 'WAIT_PAY') {
+        if (data.status !== 'WAIT_PAY' || data.status !== 'PAYING') {
           // status
           showConfirmDialog({
             message: '订单处理中,请稍等',
             showCancelButton: false
           }).then(() => {
-            router.back()
+            router.replace({
+              path: '/payment-result',
+              query: {
+                orderNo: state.orderNo
+              }
+            })
           })
         }
       } catch {
@@ -190,7 +195,7 @@ export default defineComponent({
       }
 
       try {
-        await request.post('/api-student/userPaymentOrder/updateReceiveAddress', {
+        const { data } = await request.post('/api-student/userPaymentOrder/updateReceiveAddress', {
           data: {
             orderNo: state.orderNo,
             orderType: 'ORCHESTRA',
@@ -198,12 +203,21 @@ export default defineComponent({
           }
         })
 
-        const pt = state.config.paymentChannel
-        // 判断是否有支付方式
-        if (pt) {
-          beforeSubmit()
+        if (data.status === 'PAID') {
+          router.replace({
+            path: '/payment-result',
+            query: {
+              orderNo: state.orderNo
+            }
+          })
         } else {
-          state.paymentStatus = true
+          const pt = state.config.paymentChannel
+          // 判断是否有支付方式
+          if (pt) {
+            beforeSubmit()
+          } else {
+            state.paymentStatus = true
+          }
         }
       } catch {
         //

+ 6 - 1
src/student/payment-result/index.tsx

@@ -39,6 +39,11 @@ export default defineComponent({
       }
     }
 
+    const onRefund = async () => {
+      // try {
+      // } catch {}
+    }
+
     const formatImg = (type: any) => {
       const template = {
         WAIT_PAY: iconTradeing,
@@ -108,7 +113,7 @@ export default defineComponent({
 
         {state.orders.status === 'REFUNDING' && browser().isApp && (
           <div class={'btnGroup'}>
-            <Button type="primary" round size="large" block>
+            <Button type="primary" round size="large" block onClick={onRefund}>
               撤销退费
             </Button>
           </div>

+ 109 - 26
src/student/trade-record/component/paid-list.tsx

@@ -5,11 +5,15 @@ import {
   CellGroup,
   DatePicker,
   Dialog,
+  Field,
   Icon,
   Image,
   List,
   Picker,
   Popup,
+  Radio,
+  RadioGroup,
+  showToast,
   Sticky
 } from 'vant'
 import { defineComponent, onMounted, reactive } from 'vue'
@@ -21,6 +25,7 @@ import { orderStatus, orderType } from '@/constant'
 import { moneyFormat } from '@/helpers/utils'
 import ODialog from '@/components/o-dialog'
 import { forms } from '@/school/train-planning/create'
+import { useRouter } from 'vue-router'
 
 export default defineComponent({
   name: 'wait_pay',
@@ -31,6 +36,7 @@ export default defineComponent({
     }
   },
   setup(props) {
+    const router = useRouter()
     const form = reactive({
       isClick: false,
       timeShow: false,
@@ -50,7 +56,10 @@ export default defineComponent({
         page: 1,
         rows: 20
       },
-      refundStatus: false
+      refundStatus: false,
+      resion: null,
+      refundSelect: {} as any,
+      checked: null as any
     })
 
     // WAIT_PAY: '待支付',
@@ -119,19 +128,53 @@ export default defineComponent({
         })
 
         form.resionList = data.paramValue.split('\n')
-        form.resionList.push('其它')
-        console.log(form.resionList, 'resionList')
+        form.resionList.push('其它原因')
+        // console.log(form.resionList, 'resionList')
       } catch {
         //
       }
     }
 
+    // 确认退费
+    const onConfirmRefund = async () => {
+      try {
+        const status = form.checked === form.resionList.length - 1 && form.resion
+        if (form.checked) {
+          showToast('请选择原因')
+          return
+        } else if (status) {
+          showToast('请输入原因')
+          return
+        }
+        console.log({
+          merOrderNo: form.refundSelect.orderNo,
+          refundReason: status ? form.resion : form.resionList[form.checked]
+        })
+        await request.post('/api-student/userPaymentOrder/refundPayment', {
+          data: {
+            merOrderNo: form.refundSelect.orderNo,
+            refundReason: status ? form.resion : form.resionList[form.checked]
+          }
+        })
+      } catch {
+        //
+      }
+    }
+
+    const onDetails = (item: any) => {
+      router.push({
+        path: 'payment-result',
+        query: {
+          orderNo: item.orderNo
+        }
+      })
+    }
+
     onMounted(() => {
       getList()
       getDefaultParams()
 
       Object.keys(orderType).forEach((key) => {
-        console.log(key)
         form.typeArray.push({
           text: orderType[key],
           value: key
@@ -166,7 +209,7 @@ export default defineComponent({
             immediateCheck={false}
           >
             {form.list.map((item: any) => (
-              <CellGroup inset class={styles.cellGroup}>
+              <CellGroup inset class={styles.cellGroup} onClick={() => onDetails(item)}>
                 <Cell center titleClass={styles.times}>
                   {{
                     title: () => <span class={styles.times}>{item.createTime}</span>,
@@ -192,7 +235,11 @@ export default defineComponent({
                         <Button
                           block
                           class={styles.refundBtn}
-                          onClick={() => (form.refundStatus = true)}
+                          onClick={(e: any) => {
+                            e.stopPropagation()
+                            form.refundSelect = item
+                            form.refundStatus = true
+                          }}
                         >
                           申请退费
                         </Button>
@@ -231,27 +278,63 @@ export default defineComponent({
           />
         </Popup>
 
-        <Dialog
-          v-model:show={form.refundStatus}
-          message={
-            '您将要发起退款,退款需承担千分之六的手续费,确认退款后款项将原路返还到您的付款账户中。'
-          }
-          messageAlign="left"
-          confirmButtonText="取消"
-          cancelButtonText="确认退款"
-          showCancelButton
-          onConfirm={() => (form.refundStatus = false)}
-          onCancel={() => {}}
-        >
-          {{
-            title: () => (
-              <div class={styles.dialogTitle}>
-                <i></i>
-                申请退款
+        <Popup v-model:show={form.refundStatus} round style={{ width: '90%' }}>
+          <div class={styles.container}>
+            <div class={styles.dialogTitle}>
+              <i></i>
+              申请退款
+            </div>
+
+            <div class={styles.refundContent}>
+              <div class={styles.tips}>
+                您将要发起退款,退款需承担千分之六的手续费,确认退款后款项将原路返还到您的付款账户中。
+              </div>
+
+              <div class={styles.refundTitle}>
+                <span>*</span>请选择您的退款原因
               </div>
-            )
-          }}
-        </Dialog>
+
+              <RadioGroup v-model={form.checked}>
+                {form.resionList &&
+                  form.resionList.map((item: any, index: number) => (
+                    <Cell style="padding: 16px 0;" onClick={() => (form.checked = index)}>
+                      {{
+                        icon: () => <Radio name={index} />,
+                        title: () => <span style={'padding-left: 6px'}>{item}</span>
+                      }}
+                    </Cell>
+                  ))}
+              </RadioGroup>
+              {form.checked === form.resionList.length - 1 && (
+                <Field
+                  class={styles.phoneName}
+                  v-model={form.resion}
+                  placeholder="请输入原因"
+                  maxlength={15}
+                  type="textarea"
+                  rows={2}
+                />
+              )}
+            </div>
+
+            <div class={['van-hairline--top van-dialog__footer']}>
+              <Button
+                onClick={onConfirmRefund}
+                class={['van-button van-button--default van-button--large van-dialog__cancel']}
+              >
+                确认退款
+              </Button>
+              <Button
+                onClick={() => (form.refundStatus = false)}
+                class={[
+                  'van-button van-button--default van-button--large van-dialog__confirm van-hairline--left'
+                ]}
+              >
+                取消
+              </Button>
+            </div>
+          </div>
+        </Popup>
       </>
     )
   }

+ 51 - 0
src/student/trade-record/index.module.less

@@ -74,3 +74,54 @@
     }
   }
 }
+
+.dialogTitle {
+  i {
+    display: inline-block;
+    width: 4px;
+    height: 14px;
+    background: #ff8057;
+    border-radius: 2px;
+    margin-right: 6px;
+  }
+
+  text-align: left;
+  font-size: 18px;
+  font-weight: 500;
+  color: #333333;
+  line-height: 25px;
+  padding: 20px 0 15px 25px;
+}
+
+.refundContent {
+  padding: 0 20px 25px;
+  .tips {
+    font-size: 15px;
+    color: #333333;
+    line-height: 21px;
+  }
+}
+.container {
+  :global {
+    .van-button {
+      font-size: 18px;
+      font-weight: 500;
+    }
+  }
+}
+
+.refundTitle {
+  padding-top: 25px;
+  font-size: 16px;
+  font-weight: 600;
+  color: #333333;
+  line-height: 22px;
+  span {
+    color: #f44541;
+  }
+}
+
+.phoneName {
+  background: #f2f2f2;
+  border-radius: 6px;
+}