Ver código fonte

销售制单分享链接

wangxy 1 dia atrás
pai
commit
4c0a870bec

+ 8 - 0
src/api/store/inquiryOrder.js

@@ -144,3 +144,11 @@ export function shareInquiryOrderLink(data) {
     data: data
     data: data
   })
   })
 }
 }
+
+export function computeInquiryOrderAmount(data) {
+  return request({
+    url: '/store/inquiryOrder/preOrder/compute',
+    method: 'post',
+    data: data
+  })
+}

+ 8 - 0
src/api/store/package.js

@@ -153,3 +153,11 @@ export function sharePackageOrderLink(data) {
     data: data
     data: data
   })
   })
 }
 }
+
+export function computePackageOrderAmount(data) {
+  return request({
+    url: '/store/packageOrder/preOrder/compute',
+    method: 'post',
+    data: data
+  })
+}

+ 127 - 19
src/views/store/user/components/consultationOrderDialog.vue

@@ -15,12 +15,7 @@
               </template>
               </template>
             </el-table-column>
             </el-table-column>
             <el-table-column label="患者姓名" align="center" prop="patientName" />
             <el-table-column label="患者姓名" align="center" prop="patientName" />
-            <el-table-column label="身份证号" align="center" prop="idCard" width="170px"/>
-            <el-table-column label="出生年月" align="center" prop="birthday" width="180">
-              <template slot-scope="scope">
-                <span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
-              </template>
-            </el-table-column>
+            <el-table-column label="身份证号" align="center" prop="idCard" width="170px" />
             <el-table-column label="性别" align="center" prop="sex">
             <el-table-column label="性别" align="center" prop="sex">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 <dict-tag :options="sexOptions" :value="scope.row.sex"/>
                 <dict-tag :options="sexOptions" :value="scope.row.sex"/>
@@ -31,13 +26,18 @@
         </el-radio-group>
         </el-radio-group>
       </el-form-item>
       </el-form-item>
       <el-form-item label="病情描述" prop="illnessDesc">
       <el-form-item label="病情描述" prop="illnessDesc">
-        <el-input type="textarea" rows="4" v-model="form.illnessDesc" placeholder="请输入病情描述" />
+        <el-input type="textarea" rows="2" v-model="form.illnessDesc" placeholder="请输入病情描述" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="订单类型" prop="orderType">
       <el-form-item label="订单类型" prop="orderType">
-        <el-radio-group v-model="form.orderType">
-          <el-radio label="1">图文问诊</el-radio>
-          <el-radio label="2">视频问诊</el-radio>
-          <el-radio label="3">健康咨询</el-radio>
+        <el-radio-group v-model="form.orderType" @change="handleOrderTypeChange">
+          <el-radio :label="1">图文</el-radio>
+          <el-radio :label="2">语音</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="问诊类型" prop="inquiryType">
+        <el-radio-group v-model="form.inquiryType" @change="handleInquiryTypeChange">
+          <el-radio :label="1">专家</el-radio>
+          <el-radio :label="2">极速</el-radio>
         </el-radio-group>
         </el-radio-group>
       </el-form-item>
       </el-form-item>
       <el-form-item label="医生信息" prop="doctorId">
       <el-form-item label="医生信息" prop="doctorId">
@@ -71,6 +71,15 @@
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
+      <el-form-item label="支付金额" prop="payMoney">
+        <el-input-number v-model="form.payMoney" :precision="2" :min="0" placeholder="支付金额" style="width: 300px;" @change="handlePayMoneyChange" />
+      </el-form-item>
+      <el-form-item label="应付金额" prop="payableAmount">
+        <el-input-number v-model="form.payableAmount" :precision="2" :min="0" placeholder="应付金额" style="width: 300px;" @change="handlePayableAmountChange" />
+      </el-form-item>
+      <el-form-item v-if="form.couponId" label="优惠金额">
+        <span>{{ formatMoney(discountMoney) }}</span>
+      </el-form-item>
       <el-form-item label="订单备注" prop="companyUserRemark">
       <el-form-item label="订单备注" prop="companyUserRemark">
         <el-input type="textarea" rows="2" v-model="form.companyUserRemark" placeholder="" />
         <el-input type="textarea" rows="2" v-model="form.companyUserRemark" placeholder="" />
       </el-form-item>
       </el-form-item>
@@ -85,7 +94,7 @@
       </el-form>
       </el-form>
     </div>
     </div>
     <div slot="footer" class="dialog-footer">
     <div slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="submitForm" :loading="submitLoading">分 享</el-button>
+      <el-button type="primary" @click="submitForm" :loading="submitLoading || amountLoading">分 享</el-button>
       <el-button @click="handleClose">取 消</el-button>
       <el-button @click="handleClose">取 消</el-button>
     </div>
     </div>
 
 
@@ -97,7 +106,7 @@
 
 
 <script>
 <script>
 import { listPatient } from "@/api/store/patient";
 import { listPatient } from "@/api/store/patient";
-import { shareInquiryOrderLink } from "@/api/store/inquiryOrder";
+import { shareInquiryOrderLink, computeInquiryOrderAmount } from "@/api/store/inquiryOrder";
 import { getDoctorList } from "@/api/his/doctor";
 import { getDoctorList } from "@/api/his/doctor";
 import { getUserCoupon } from "@/api/store/coupon";
 import { getUserCoupon } from "@/api/store/coupon";
 import addPatient from "@/views/store/components/addPatient";
 import addPatient from "@/views/store/components/addPatient";
@@ -115,12 +124,19 @@ export default {
     return {
     return {
       dialogVisible: false,
       dialogVisible: false,
       submitLoading: false,
       submitLoading: false,
+      amountLoading: false,
       shareLink: null,
       shareLink: null,
+      discountMoney: 0,
+      originalPayableAmount: null,
+      amountCalculated: false,
       form: {
       form: {
         patientId: null,
         patientId: null,
         illnessDesc: null,
         illnessDesc: null,
-        orderType: '1',
+        orderType: 1,
+        inquiryType: 1,
         doctorId: null,
         doctorId: null,
+        payMoney: null,
+        payableAmount: null,
         companyUserRemark: null,
         companyUserRemark: null,
         couponId: null
         couponId: null
       },
       },
@@ -128,6 +144,7 @@ export default {
         patientId: [{ required: true, message: "请选择就诊人", trigger: "change" }],
         patientId: [{ required: true, message: "请选择就诊人", trigger: "change" }],
         illnessDesc: [{ required: true, message: "请输入病情描述", trigger: "blur" }],
         illnessDesc: [{ required: true, message: "请输入病情描述", trigger: "blur" }],
         orderType: [{ required: true, message: "请选择订单类型", trigger: "change" }],
         orderType: [{ required: true, message: "请选择订单类型", trigger: "change" }],
+        inquiryType: [{ required: true, message: "请选择问诊类型", trigger: "change" }],
         doctorId: [{ required: true, message: "请选择医生", trigger: "change" }]
         doctorId: [{ required: true, message: "请选择医生", trigger: "change" }]
       },
       },
       patientList: [],
       patientList: [],
@@ -162,12 +179,18 @@ export default {
       this.form = {
       this.form = {
         patientId: null,
         patientId: null,
         illnessDesc: null,
         illnessDesc: null,
-        orderType: '1',
+        orderType: 1,
+        inquiryType: 1,
         doctorId: null,
         doctorId: null,
+        payMoney: null,
+        payableAmount: null,
         companyUserRemark: null,
         companyUserRemark: null,
         couponId: null
         couponId: null
       };
       };
       this.selectedDoctor = null;
       this.selectedDoctor = null;
+      this.discountMoney = 0;
+      this.originalPayableAmount = null;
+      this.amountCalculated = false;
       if (this.$refs.form) {
       if (this.$refs.form) {
         this.$refs.form.resetFields();
         this.$refs.form.resetFields();
       }
       }
@@ -195,6 +218,21 @@ export default {
       var item = this.doctorList.find(d => d.doctorId === doctorId);
       var item = this.doctorList.find(d => d.doctorId === doctorId);
       if (item) {
       if (item) {
         this.selectedDoctor = item;
         this.selectedDoctor = item;
+        const consultFee = this.getConsultFee(item.priceJson);
+        this.form.payMoney = null;
+        this.form.payableAmount = consultFee;
+        this.originalPayableAmount = consultFee;
+      } else {
+        this.selectedDoctor = null;
+        this.form.payMoney = null;
+        this.form.payableAmount = null;
+        this.originalPayableAmount = null;
+      }
+      this.discountMoney = 0;
+      this.amountCalculated = false;
+      this.shareLink = null;
+      if (this.form.couponId) {
+        this.computeAmount();
       }
       }
     },
     },
     getConsultFee(priceJson) {
     getConsultFee(priceJson) {
@@ -202,13 +240,75 @@ export default {
       try {
       try {
         var priceList = JSON.parse(priceJson);
         var priceList = JSON.parse(priceJson);
         var item = priceList.find(p => p.type === parseInt(this.form.orderType));
         var item = priceList.find(p => p.type === parseInt(this.form.orderType));
-        return item ? item.price : 0;
+        return item ? Number(item.price || 0) : 0;
       } catch (e) {
       } catch (e) {
         return 0;
         return 0;
       }
       }
     },
     },
+    handleOrderTypeChange() {
+      if (this.selectedDoctor) {
+        const consultFee = this.getConsultFee(this.selectedDoctor.priceJson);
+        this.form.payableAmount = consultFee;
+        this.originalPayableAmount = consultFee;
+      }
+      this.discountMoney = 0;
+      this.amountCalculated = false;
+      this.shareLink = null;
+      if (this.form.couponId) {
+        this.computeAmount();
+      }
+    },
+    handleInquiryTypeChange() {
+      this.shareLink = null;
+    },
     handleCouponChange(couponId) {
     handleCouponChange(couponId) {
-      console.log('Selected coupon:', couponId);
+      this.shareLink = null;
+      this.amountCalculated = false;
+      if (!couponId) {
+        this.discountMoney = 0;
+        if (this.originalPayableAmount !== null && this.originalPayableAmount !== undefined) {
+          this.form.payableAmount = this.originalPayableAmount;
+        }
+        return;
+      }
+      this.computeAmount();
+    },
+    handlePayMoneyChange() {
+      this.shareLink = null;
+    },
+    handlePayableAmountChange() {
+      this.amountCalculated = true;
+      this.shareLink = null;
+    },
+    formatMoney(value) {
+      const money = Number(value || 0);
+      return `¥${money.toFixed(2)}`;
+    },
+    buildAmountData() {
+      return {
+        userId: this.userInfo.userId,
+        couponId: this.form.couponId,
+        payMoney: this.form.payMoney,
+        payableAmount: this.form.payableAmount
+      };
+    },
+    computeAmount() {
+      if (!this.form.doctorId || this.form.payableAmount === null || this.form.payableAmount === undefined) {
+        return Promise.resolve();
+      }
+      this.amountLoading = true;
+      return computeInquiryOrderAmount(this.buildAmountData()).then(response => {
+        if (response.code === 200) {
+          const data = response.data || response;
+          this.form.payableAmount = data.payableAmount;
+          this.discountMoney = data.discountMoney || 0;
+          this.amountCalculated = true;
+          return;
+        }
+        return Promise.reject(response);
+      }).finally(() => {
+        this.amountLoading = false;
+      });
     },
     },
     handleAddUserPatient() {
     handleAddUserPatient() {
       this.userPatient.open = true;
       this.userPatient.open = true;
@@ -238,12 +338,20 @@ export default {
             patientId: this.form.patientId,
             patientId: this.form.patientId,
             title: this.form.illnessDesc,
             title: this.form.illnessDesc,
             orderType: this.form.orderType,
             orderType: this.form.orderType,
+            inquiryType: this.form.inquiryType,
             doctorId: this.form.doctorId,
             doctorId: this.form.doctorId,
             companyUserRemark: this.form.companyUserRemark,
             companyUserRemark: this.form.companyUserRemark,
-            couponId: this.form.couponId
+            couponId: this.form.couponId,
+            payMoney: this.form.payMoney,
+            payableAmount: this.form.payableAmount
           };
           };
           this.submitLoading = true;
           this.submitLoading = true;
-          shareInquiryOrderLink(submitData).then(response => {
+          const request = this.form.couponId && !this.amountCalculated ? this.computeAmount() : Promise.resolve();
+          request.then(() => {
+            submitData.payMoney = this.form.payMoney;
+            submitData.payableAmount = this.form.payableAmount;
+            return shareInquiryOrderLink(submitData);
+          }).then(response => {
             if (response.code === 200) {
             if (response.code === 200) {
               this.shareLink = response.shareLink || (response.data && response.data.shareLink);
               this.shareLink = response.shareLink || (response.data && response.data.shareLink);
               this.$emit("success");
               this.$emit("success");

+ 96 - 12
src/views/store/user/components/packageOrderDialog.vue

@@ -75,6 +75,11 @@
               <dict-tag :options="packageSubTypeOptions" :value="scope.row.packageSubType"/>
               <dict-tag :options="packageSubTypeOptions" :value="scope.row.packageSubType"/>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
+          <el-table-column label="支付金额" align="center" prop="totalPrice">
+            <template slot-scope="scope">
+              <span>{{ formatMoney(scope.row.totalPrice) }}</span>
+            </template>
+          </el-table-column>
         </el-table>
         </el-table>
       </el-form-item>
       </el-form-item>
       <el-form-item label="优惠券" prop="couponId">
       <el-form-item label="优惠券" prop="couponId">
@@ -97,14 +102,14 @@
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item v-if="form.payType && form.payType !== '1' && form.payType !== 1" label="实付金额" prop="payMoney">
-        <el-input-number v-model="form.payMoney" :precision="2" :min="0" placeholder="请输入实付金额" style="width: 300px;" />
+      <el-form-item label="支付金额" prop="payMoney">
+        <el-input-number v-model="form.payMoney" :precision="2" :min="0" placeholder="支付金额" style="width: 300px;" @change="handlePayMoneyChange" />
       </el-form-item>
       </el-form-item>
-      <el-form-item v-if="form.payType && form.payType !== '1' && form.payType !== 1" label="应付金额" prop="payableAmount">
-        <el-input-number v-model="form.payableAmount" :precision="2" :min="0" placeholder="请输入应付金额" style="width: 300px;" />
+      <el-form-item label="应付金额" prop="payableAmount">
+        <el-input-number v-model="form.payableAmount" :precision="2" :min="0" placeholder="应付金额" style="width: 300px;" @change="handlePayableAmountChange" />
       </el-form-item>
       </el-form-item>
-      <el-form-item v-if="form.payType && (form.payType === '1' || form.payType === 1)" label="实付金额" prop="payMoney">
-        <el-input-number v-model="form.payMoney" :precision="2" :min="0" placeholder="请输入实付金额" style="width: 300px;" />
+      <el-form-item v-if="form.couponId" label="优惠金额">
+        <span>{{ formatMoney(discountMoney) }}</span>
       </el-form-item>
       </el-form-item>
       <el-form-item label="订单备注" prop="orderRemark">
       <el-form-item label="订单备注" prop="orderRemark">
         <el-input type="textarea" rows="2" v-model="form.orderRemark" placeholder="" />
         <el-input type="textarea" rows="2" v-model="form.orderRemark" placeholder="" />
@@ -120,7 +125,7 @@
       </el-form>
       </el-form>
     </div>
     </div>
     <div slot="footer" class="dialog-footer">
     <div slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="submitForm" :loading="submitLoading">分 享</el-button>
+      <el-button type="primary" @click="submitForm" :loading="submitLoading || amountLoading">分 享</el-button>
       <el-button @click="handleClose">取 消</el-button>
       <el-button @click="handleClose">取 消</el-button>
     </div>
     </div>
 
 
@@ -136,7 +141,7 @@
 <script>
 <script>
 import { listUserAddress } from "@/api/store/userAddress";
 import { listUserAddress } from "@/api/store/userAddress";
 import { listPatient } from "@/api/store/patient";
 import { listPatient } from "@/api/store/patient";
-import { packageList, sharePackageOrderLink } from "@/api/store/package";
+import { packageList, sharePackageOrderLink, computePackageOrderAmount } from "@/api/store/package";
 import { getUserCoupon } from "@/api/store/coupon";
 import { getUserCoupon } from "@/api/store/coupon";
 import addUserAddress from "@/views/store/components/addUserAddress";
 import addUserAddress from "@/views/store/components/addUserAddress";
 import addPatient from "@/views/store/components/addPatient";
 import addPatient from "@/views/store/components/addPatient";
@@ -154,7 +159,11 @@ export default {
     return {
     return {
       dialogVisible: false,
       dialogVisible: false,
       submitLoading: false,
       submitLoading: false,
+      amountLoading: false,
       shareLink: null,
       shareLink: null,
+      discountMoney: 0,
+      originalPayableAmount: null,
+      amountCalculated: false,
       form: {
       form: {
         addressId: null,
         addressId: null,
         patientId: null,
         patientId: null,
@@ -229,13 +238,15 @@ export default {
         couponId: null
         couponId: null
       };
       };
       this.package = [];
       this.package = [];
+      this.discountMoney = 0;
+      this.originalPayableAmount = null;
+      this.amountCalculated = false;
       if (this.$refs.form) {
       if (this.$refs.form) {
         this.$refs.form.resetFields();
         this.$refs.form.resetFields();
       }
       }
     },
     },
     handlePayTypeChange() {
     handlePayTypeChange() {
-      this.form.payMoney = null;
-      this.form.payableAmount = null;
+      this.shareLink = null;
     },
     },
     getAddressList(userId) {
     getAddressList(userId) {
       var data = { userId: userId };
       var data = { userId: userId };
@@ -269,10 +280,78 @@ export default {
       var item = this.packageList.find(p => p.packageId === packageId);
       var item = this.packageList.find(p => p.packageId === packageId);
       if (item) {
       if (item) {
         this.package = [item];
         this.package = [item];
+        this.form.payMoney = null;
+        this.form.payableAmount = item.totalPrice || 0;
+        this.originalPayableAmount = item.totalPrice || 0;
+      } else {
+        this.package = [];
+        this.form.payMoney = null;
+        this.form.payableAmount = null;
+        this.originalPayableAmount = null;
+      }
+      this.discountMoney = 0;
+      this.amountCalculated = false;
+      this.shareLink = null;
+      if (this.form.couponId) {
+        this.computeAmount();
       }
       }
     },
     },
     handleCouponChange(couponId) {
     handleCouponChange(couponId) {
-      console.log('Selected coupon:', couponId);
+      this.shareLink = null;
+      this.amountCalculated = false;
+      if (!couponId) {
+        this.discountMoney = 0;
+        if (this.originalPayableAmount !== null && this.originalPayableAmount !== undefined) {
+          this.form.payableAmount = this.originalPayableAmount;
+        }
+        return;
+      }
+      this.computeAmount();
+    },
+    handlePayMoneyChange() {
+      this.shareLink = null;
+    },
+    handlePayableAmountChange() {
+      this.shareLink = null;
+      if (this.amountLoading) {
+        return;
+      }
+      if (this.form.couponId) {
+        this.amountCalculated = false;
+        this.computeAmount();
+        return;
+      }
+      this.amountCalculated = true;
+    },
+    formatMoney(value) {
+      const money = Number(value || 0);
+      return `¥${money.toFixed(2)}`;
+    },
+    buildAmountData() {
+      return {
+        userId: this.userInfo.userId,
+        couponId: this.form.couponId,
+        payMoney: this.form.payMoney,
+        payableAmount: this.form.payableAmount
+      };
+    },
+    computeAmount() {
+      if (!this.form.packageId || this.form.payableAmount === null || this.form.payableAmount === undefined) {
+        return Promise.resolve();
+      }
+      this.amountLoading = true;
+      return computePackageOrderAmount(this.buildAmountData()).then(response => {
+        if (response.code === 200) {
+          const data = response.data || response;
+          this.form.payableAmount = data.payableAmount;
+          this.discountMoney = data.discountMoney || 0;
+          this.amountCalculated = true;
+          return;
+        }
+        return Promise.reject(response);
+      }).finally(() => {
+        this.amountLoading = false;
+      });
     },
     },
     handleAddUserAddress() {
     handleAddUserAddress() {
       this.userAddress.open = true;
       this.userAddress.open = true;
@@ -319,7 +398,12 @@ export default {
             couponId: this.form.couponId
             couponId: this.form.couponId
           };
           };
           this.submitLoading = true;
           this.submitLoading = true;
-          sharePackageOrderLink(submitData).then(response => {
+          const request = this.form.couponId && !this.amountCalculated ? this.computeAmount() : Promise.resolve();
+          request.then(() => {
+            submitData.payMoney = this.form.payMoney;
+            submitData.payableAmount = this.form.payableAmount;
+            return sharePackageOrderLink(submitData);
+          }).then(response => {
             if (response.code === 200) {
             if (response.code === 200) {
               this.shareLink = response.shareLink || (response.data && response.data.shareLink);
               this.shareLink = response.shareLink || (response.data && response.data.shareLink);
               this.$emit("success");
               this.$emit("success");