chengziding пре 2 месеци
родитељ
комит
885fd8cf05

+ 18 - 0
src/api/finance.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 查询财务列表
+export function statisticsPage (query) {
+  return request({
+    url: '/order/statistics/page',
+    method: 'get',
+    params: query
+  })
+}
+// 统计金额
+export function statisticsSumPrice (query) {
+  return request({
+    url: '/order/statistics/sumPrice',
+    method: 'get',
+    params: query
+  })
+}

+ 38 - 0
src/api/hospitalOrder.js

@@ -21,4 +21,42 @@ export function orderInfo (id) {
     url: `/order/order/info/${id}`,
     method: 'get',
   })
+}
+// 查询订单评价列表
+export function orderReviewsPage (query) {
+  return request({
+    url: `/order/orderReviews/page`,
+    method: 'get',
+    params: query
+  })
+}
+// 查询售后订单列表
+export function orderRefundPage (query) {
+  return request({
+    url: `/order/orderRefund/page`,
+    method: 'get',
+    params: query
+  })
+}
+// 同意或拒绝售后订单
+export function agreeOrRefuse (data) {
+  return request({
+    url: `/order/orderRefund/agreeOrRefuse`,
+    method: 'post',
+    data
+  })
+}
+// 获取售后订单详细信息
+export function orderRefundInfo (id) {
+  return request({
+    url: `/order/orderRefund/info/${id}`,
+    method: 'get',
+  })
+}
+// 售后订单 枚举
+export function orderRefundEnum () {
+  return request({
+    url: `/order/orderRefund/enum`,
+    method: 'get',
+  })
 }

+ 65 - 13
src/utils/ruoyi.js

@@ -6,7 +6,7 @@
  */
 
 // 日期格式化
-export function parseTime(time, pattern) {
+export function parseTime (time, pattern) {
   if (arguments.length === 0 || !time) {
     return null
   }
@@ -47,14 +47,14 @@ export function parseTime(time, pattern) {
 }
 
 // 表单重置
-export function resetForm(refName) {
+export function resetForm (refName) {
   if (this.$refs[refName]) {
     this.$refs[refName].resetFields();
   }
 }
 
 // 添加日期范围
-export function addDateRange(params, dateRange, propName) {
+export function addDateRange (params, dateRange, propName) {
   let search = params;
   search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
   dateRange = Array.isArray(dateRange) ? dateRange : [];
@@ -68,8 +68,8 @@ export function addDateRange(params, dateRange, propName) {
   return search;
 }
 
-// 回显数据字典 
-export function selectDictLabel(datas, value) {
+// 回显数据字典
+export function selectDictLabel (datas, value) {
   if (value === undefined) {
     return "";
   }
@@ -87,7 +87,7 @@ export function selectDictLabel(datas, value) {
 }
 
 // 回显数据字典(字符串数组)
-export function selectDictLabels(datas, value, separator) {
+export function selectDictLabels (datas, value, separator) {
   if (value === undefined) {
     return "";
   }
@@ -110,7 +110,7 @@ export function selectDictLabels(datas, value, separator) {
 }
 
 // 字符串格式化(%s )
-export function sprintf(str) {
+export function sprintf (str) {
   var args = arguments, flag = true, i = 1;
   str = str.replace(/%s/g, function () {
     var arg = args[i++];
@@ -124,7 +124,7 @@ export function sprintf(str) {
 }
 
 // 转换字符串,undefined,null等转化为""
-export function parseStrEmpty(str) {
+export function parseStrEmpty (str) {
   if (!str || str == "undefined" || str == "null") {
     return "";
   }
@@ -132,7 +132,7 @@ export function parseStrEmpty(str) {
 }
 
 // 数据合并
-export function mergeRecursive(source, target) {
+export function mergeRecursive (source, target) {
   for (var p in target) {
     try {
       if (target[p].constructor == Object) {
@@ -154,7 +154,7 @@ export function mergeRecursive(source, target) {
  * @param {*} parentId 父节点字段 默认 'parentId'
  * @param {*} children 孩子节点字段 默认 'children'
  */
-export function handleTree(data, id, parentId, children) {
+export function handleTree (data, id, parentId, children) {
   let config = {
     id: id || 'id',
     parentId: parentId || 'parentId',
@@ -185,7 +185,7 @@ export function handleTree(data, id, parentId, children) {
     adaptToChildrenList(t);
   }
 
-  function adaptToChildrenList(o) {
+  function adaptToChildrenList (o) {
     if (childrenListMap[o[config.id]] !== null) {
       o[config.childrenList] = childrenListMap[o[config.id]];
     }
@@ -202,7 +202,7 @@ export function handleTree(data, id, parentId, children) {
 * 参数处理
 * @param {*} params  参数
 */
-export function tansParams(params) {
+export function tansParams (params) {
   let result = ''
   for (const propName of Object.keys(params)) {
     const value = params[propName];
@@ -225,7 +225,7 @@ export function tansParams(params) {
 }
 
 // 验证是否为blob格式
-export async function blobValidate(data) {
+export async function blobValidate (data) {
   try {
     const text = await data.text();
     JSON.parse(text);
@@ -233,4 +233,56 @@ export async function blobValidate(data) {
   } catch (error) {
     return true;
   }
+}
+// 查询今日、本月、本年的开始、结束的时间,返回格式为年月日
+export function getDateRange (type) {
+  const now = new Date();
+  const year = now.getFullYear();
+  const month = now.getMonth();
+  const date = now.getDate();
+
+  // 格式化函数:转为 YYYY-MM-DD
+  function formatDate (date) {
+    const y = date.getFullYear();
+    const m = String(date.getMonth() + 1).padStart(2, '0');
+    const d = String(date.getDate()).padStart(2, '0');
+    return `${y}-${m}-${d}`;
+  }
+
+  let start, end;
+
+  switch (type.toLowerCase()) {
+    case 'today':
+      start = new Date(year, month, date);
+      end = start;
+      break;
+    case 'week':
+      // 默认以 **周一为本周开始**,周日为结束
+      const day = now.getDay(); // 0=周日, 1=周一, ..., 6=周六
+      const diffToMonday = day === 0 ? 6 : day - 1; // 周一的偏移量
+      start = new Date(now);
+      start.setDate(date - diffToMonday);
+      start.setHours(0, 0, 0, 0);
+
+      end = new Date(start);
+      end.setDate(start.getDate() + 6); // 周日
+      break;
+    case 'month':
+      start = new Date(year, month, 1);
+      end = new Date(year, month + 1, 0); // 下个月第0天 = 当前月最后一天
+      break;
+
+    case 'year':
+      start = new Date(year, 0, 1);  // 1月1日
+      end = new Date(year, 11, 31);  // 12月31日
+      break;
+
+    default:
+      throw new Error("type must be one of: 'today', 'month', 'year'");
+  }
+
+  return {
+    start: formatDate(start),
+    end: formatDate(end)
+  };
 }

+ 8 - 0
src/views/caregiver/index.vue

@@ -43,6 +43,9 @@
       <el-col :span="1.5">
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table v-loading="loading" :data="list">
@@ -263,6 +266,11 @@ export default {
         this.hospitalList = response.data;
       });
     },
+    handleExport () {
+      this.download('/info/nursingWorker/export', {
+        ...this.queryParams
+      }, `护工列表_${new Date().getTime()}.xlsx`)
+    },
     /** 查看/修改按钮操作 */
     handleUpdate (row, title) {
       this.loading = true;

+ 120 - 47
src/views/finance/index.vue

@@ -1,32 +1,26 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="下单医院" prop="adName">
-        <el-select v-model="queryParams.locationCode" placeholder="请输入广告位置" clearable size="small" style="width: 240px">
-          <!-- <el-option v-for="dict in dict.type.ad_location" :key="dict.value" :label="dict.label" :value="dict.value" /> -->
+      <el-form-item label="下单医院" prop="hospitalId">
+        <el-select v-model="queryParams.hospitalId" filterable placeholder="请选择下单医院" size="small" clearable style="width: 100%">
+          <el-option v-for="(v,i) in shopList" :key="i" :label="v.name" :value="v.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="订单号" prop="locationCode">
-        <el-input v-model="queryParams.adName" placeholder="请输入医院名称" maxlength="10" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="订单号" prop="orderNo">
+        <el-input v-model="queryParams.orderNo" placeholder="请输入订单号" maxlength="10" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="下单手机号" prop="locationCode" label-width="100px">
-        <el-input v-model="queryParams.adName" placeholder="请输入医院名称" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="下单手机号" prop="userMobile" label-width="100px">
+        <el-input v-model="queryParams.userMobile" placeholder="请输入下单手机号" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="服务名称" prop="locationCode">
-        <el-input v-model="queryParams.adName" placeholder="请输入医院名称" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="服务名称" prop="serviceName">
+        <el-input v-model="queryParams.serviceName" placeholder="请输入服务名称" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="下单时间">
+      <!-- <el-form-item label="下单时间">
         <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="订单状态" prop="locationCode">
-        <el-select v-model="queryParams.locationCode" placeholder="请输入广告位置" clearable size="small" style="width: 240px">
-          <!-- <el-option v-for="dict in dict.type.ad_location" :key="dict.value" :label="dict.label" :value="dict.value" /> -->
-        </el-select>
-      </el-form-item>
-      <el-form-item label="退款状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请输入状态" clearable size="small" style="width: 240px">
-          <el-option label="上架" :value="true" />
-          <el-option label="下架" :value="false" />
+      </el-form-item> -->
+      <el-form-item label="订单状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable size="small" style="width: 240px">
+          <el-option v-for="(v,i) in statusList" :key="i" :label="v.value" :value="v.code" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -36,12 +30,12 @@
     </el-form>
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-radio-group size="small" v-model="queryParams.status" style="margin-bottom: 30px;" @input="handleQuery">
+        <el-radio-group size="small" v-model="queryParams.daterange" style="margin-bottom: 30px;" @input="daterangeChange">
           <el-radio-button v-for="(v,i) in queryStatusList" :key="i" :label="v.value">{{v.label}}</el-radio-button>
         </el-radio-group>
       </el-col>
-      <el-col :span="1.5">
-        <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+      <el-col :span="1.5" v-if="queryParams.daterange=='range'">
+        <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="handleQuery"></el-date-picker>
       </el-col>
       <el-col :span="1.5">
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
@@ -50,13 +44,13 @@
     </el-row>
     <el-row :gutter="10" class="mb8">
       <el-col :span="3">
-        合计应付金额:4544.00
+        合计应付金额:{{sumPrice.totalPrice||0}}
       </el-col>
       <el-col :span="3">
-        合计退款金额:4544.00
+        合计退款金额:{{sumPrice.refundPrice||0}}
       </el-col>
     </el-row>
-    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="list">
       <el-table-column type="index" width="55" label="序号" align="center">
         <template slot-scope="scope">
           <div>
@@ -64,21 +58,36 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="订单号" align="center" prop="locationCodeText" />
-      <el-table-column label="服务名称" align="center" prop="locationCodeText" />
-      <el-table-column label="销售价格" align="center" prop="locationCodeText" />
-      <el-table-column label="购买数" align="center" prop="locationCodeText" />
-      <el-table-column label="应付金额" align="center" prop="locationCodeText" />
-      <el-table-column label="退款数" align="center" prop="locationCodeText" />
-      <el-table-column label="退款金额" align="center" prop="locationCodeText" />
-      <el-table-column label="下单手机号" align="center" prop="locationCodeText" />
-      <el-table-column label="所属医院" align="center" prop="locationCodeText" />
-      <el-table-column label="申请时间" align="center" prop="locationCodeText" />
-      <el-table-column label="订单状态" align="center" prop="locationCodeText" />
-      <el-table-column label="状态" align="center" prop="locationCodeText" />
+      <el-table-column label="订单号" align="center" prop="orderNo" />
+      <el-table-column label="服务名称" align="center" prop="serviceName" />
+      <el-table-column label="销售价格" align="center" prop="sellingPrice" />
+      <el-table-column label="购买数" align="center" prop="orderNum" />
+      <el-table-column label="应付金额" align="center" prop="totalPrice" />
+      <el-table-column label="退款数" align="center" prop="refundNum">
+        <template slot-scope="{row}">
+          <span>{{row.refundNum||'0'}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="退款金额" align="center" prop="refundPrice">
+        <template slot-scope="{row}">
+          <span>{{row.refundPrice||'/'}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="下单手机号" align="center" prop="userMobile" />
+      <el-table-column label="所属医院" align="center" prop="hospitalName" />
+      <el-table-column label="申请时间" align="center" prop="createTime">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="订单状态" align="center" prop="status">
+        <template slot-scope="{row}">
+          <div v-for="(v,i) in statusList" :key="i" :type="v.tag" v-if="row.status==v.code">{{v.value}}</div>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text">查看订单</el-button>
+          <el-button size="mini" type="text" @click="goOrderDetails(scope.row)">查看订单</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -86,6 +95,10 @@
 </template>
 
 <script>
+import { statisticsPage, statisticsSumPrice } from "@/api/finance"
+import { orderEnum } from "@/api/hospitalOrder.js"
+import { hospitalSimpleList } from "@/api/hospital.js"
+import { getDateRange } from "@/utils/ruoyi"
 export default {
   data () {
     return {
@@ -115,29 +128,89 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        status: undefined
+        status: undefined,
+        daterange: 'all'
       },
       // 表单参数
       form: {},
       queryStatusList: [
-        { label: '今日', value: undefined },
-        { label: '本周', value: 10 },
-        { label: '本月', value: 20 },
-        { label: '本年', value: 40 },
-        { label: '全部', value: 0 },
-        { label: '指定日期', value: 30 },
+        { label: '今日', value: 'today' },
+        { label: '本周', value: 'week' },
+        { label: '本月', value: 'month' },
+        { label: '本年', value: 'year' },
+        { label: '全部', value: 'all' },
+        { label: '指定日期', value: 'range' },
       ],
+      statusList: [],
+      shopList: [],
+      sumPrice: {}
     }
   },
+  created () {
+    this.getList();
+    this.getOrderEnum();
+    this.getShopList();
+    this.getStatistics();
+  },
   methods: {
     /** 搜索按钮操作 */
     handleQuery () {
       this.queryParams.pageNum = 1;
       this.getList();
     },
+    goOrderDetails (row) {
+      this.$router.push({
+        path: '/order/orderList/details',
+        query: { id: row.id }
+      })
+    },
+    daterangeChange () {
+      this.daterangeCreateTime = [];
+      this.queryParams.startTime = undefined;
+      this.queryParams.endTime = undefined;
+      if (this.queryParams.daterange == 'all') {
+        this.handleQuery();
+      } else if (this.queryParams.daterange == 'range') {
+
+      } else {
+        let obj = getDateRange(this.queryParams.daterange)
+        this.queryParams.startTime = obj.start;
+        this.queryParams.endTime = obj.end;
+      }
+      this.handleQuery();
+    },
+    getOrderEnum () {
+      orderEnum().then(res => {
+        this.statusList = res.data.orderStatus;
+      })
+    },
+    getShopList () {
+      hospitalSimpleList().then(res => {
+        this.shopList = res.data
+      })
+    },
+    getList () {
+      this.loading = true;
+      this.queryParams["createTimeStart"] = undefined;
+      this.queryParams["createTimeEnd"] = undefined;
+      if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
+        this.queryParams["createTimeStart"] = this.daterangeCreateTime[0];
+        this.queryParams["createTimeEnd"] = this.daterangeCreateTime[1];
+      }
+      statisticsPage(this.queryParams).then(response => {
+        this.list = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    getStatistics () {
+      statisticsSumPrice().then(res => {
+        this.sumPrice = res.data;
+      })
+    },
     //  导出
     handleExport () {
-      this.download('/order/order/export', {
+      this.download('/order/statistics/export', {
         ...this.queryParams
       }, `财务列表_${new Date().getTime()}.xlsx`)
     },

+ 188 - 115
src/views/order/afterSaleOrder/details.vue

@@ -1,165 +1,211 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" inline>
+    <el-form :model="form" ref="form" inline v-loading="loading">
       <h3>基础信息</h3>
-      <el-form-item label="订单号:" prop="name">{{form.orderNumber}}</el-form-item>
-      <el-form-item label="所属商家:" prop="name">{{form.businessName}}</el-form-item>
-      <el-form-item label="商品名称:" prop="name">{{form.businessProductName}}</el-form-item>
-      <el-form-item label="订单属性:" prop="name">{{form.productOrder.orderType==0?"自购":form.productOrder.orderType==1?"奖励":"--"}}</el-form-item>
-      <el-form-item label="购买数量:" prop="name">{{form.buyQuantity}}(可使用0)</el-form-item>
-      <el-form-item label="销售价格:" prop="name">{{form.sellingPrice}}</el-form-item>
-      <el-form-item label="应付金额:" prop="name">{{form.orderAmount}}</el-form-item>
+      <el-form-item label="订单号:" prop="name">{{form.orderNo}}</el-form-item>
+      <br>
+      <el-form-item label="下单人姓名:" prop="name">{{form.userName}}</el-form-item>
+      <el-form-item label="下单人手机号:" prop="name">{{form.userMobile}}</el-form-item>
+      <el-form-item label="下单时间:" prop="name">{{ parseTime(form.createTime, '{y}-{m}-{d} {h}:{i}') }}</el-form-item>
       <el-form-item label="订单状态:" prop="name">
-        <!-- <el-tag v-if="form.productOrder.orderStatus==10">待使用</el-tag>
-        <el-tag v-if="form.productOrder.orderStatus==20&&form.productOrder.refundStatus==0" type="success">已完成</el-tag>
-        <el-tag v-if="form.productOrder.orderStatus==30&&form.productOrder.refundStatus==2" type="info">已退款</el-tag>
-        <el-tag v-if="form.productOrder.orderStatus==20&&form.productOrder.refundStatus==1" type="info">已完成(有退款)</el-tag>
-        <el-tag v-if="form.productOrder.orderStatus==0" type="danger">待支付</el-tag>
-        <el-tag v-if="form.productOrder.orderStatus==30&&form.productOrder.refundStatus!=2" type="info">已取消</el-tag> -->
-        <el-tag v-if="form.refundStatus===0">待处理</el-tag>
-        <el-tag type="info" v-if="form.refundStatus===1">已退款</el-tag>
-        <el-tag type="danger" v-if="form.refundStatus===2">退款失败</el-tag>
-        <el-tag type="warning" v-if="form.refundStatus===3">退款拒绝</el-tag>
+        {{dealStatus(form.status)}}
       </el-form-item>
-      <el-form-item label="下单人姓名:" prop="name">{{form.userNickname}}</el-form-item>
-      <el-form-item label="下单人手机号:" prop="name">{{form.userPhone}}</el-form-item>
-      <el-form-item label="下单时间:" prop="name">{{parseTime(form.orderTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
-      <el-form-item label="预约日期:" prop="name" v-if="form.reservationDate">{{form.reservationDate}}</el-form-item>
-      <el-form-item label="预约场次:" prop="name" v-if="form.reservationTime">{{form.reservationTime}}</el-form-item>
-      <div v-if="form.productOrder.productVisitor">
-        <h3>游客信息</h3>
-        <el-form-item label="游客姓名:" prop="name">{{form.productOrder.productVisitor.visitorName}}</el-form-item>
-        <el-form-item label="游客手机号:" prop="name">{{form.productOrder.productVisitor.visitorPhone}}</el-form-item>
-        <el-form-item label="游客身份证号:" prop="name">{{form.productOrder.productVisitor.visitorCardNumber}}</el-form-item>
+      <h3>服务信息</h3>
+      <el-form-item label="下单医院:" prop="name">{{form.orderVo.hospitalVo.name}}</el-form-item>
+      <el-form-item label="所在科室:" prop="name">{{form.orderVo.hospitalDepartmentName}}</el-form-item>
+      <el-form-item label="医院地址:" prop="name">{{form.orderVo.hospitalVo.address}}</el-form-item>
+      <el-form-item label="期望时间:" prop="name">{{parseTime(form.expectedTime, '{y}-{m}-{d} {h}:{i}')||'-'}}</el-form-item>
+      <el-form-item label="服务名称:" prop="name">{{form.serviceName}}</el-form-item>
+      <el-form-item label="房床号:" prop="name">{{form.roomNumber}}</el-form-item>
+      <el-form-item label="下单数量:" prop="name">{{form.orderNum}}{{dealServiceUnitList(form.serviceUnit)}}</el-form-item>
+      <el-form-item label="销售价格:" prop="name">{{form.sellingPrice}}</el-form-item>
+      <el-form-item label="应付金额:" prop="name">{{form.totalPrice}}</el-form-item>
+      <el-form-item label="特殊需求:" prop="name">{{form.remarks||'-'}}</el-form-item>
+      <div class="w20">
+        <h3>就诊人信息</h3>
+        <el-form-item label="就诊人姓名:" prop="name">{{ form.orderVo.patientVo.name}}</el-form-item>
+        <el-form-item label="电话:" prop="name">{{form.orderVo.patientVo.mobile}}</el-form-item>
+        <el-form-item label="性别:" prop="name">{{dealGender(form.orderVo.patientVo.gender)}}</el-form-item>
+        <el-form-item label="年龄:" prop="name">{{form.orderVo.patientVo.age}}</el-form-item>
+        <el-form-item label="关系:" prop="name">
+          <div v-for="(v,i) in dict.type.patient_relationship" :key="i" v-if="v.value==form.orderVo.patientVo.relationship">{{v.label}}</div>
+        </el-form-item>
       </div>
-      <h3>付款信息</h3>
-      <el-form-item label="支付时间:" prop="name">{{parseTime(form.productOrder.payTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
-      <el-form-item label="支付方式:" prop="name">微信支付</el-form-item>
-      <el-form-item label="支付流水号:" prop="name">{{form.productOrder.payOrder}}</el-form-item>
-      <el-form-item label="实际支付金额:" prop="name">{{form.productOrder.payAmount||'--'}}</el-form-item>
-      <h3>退款信息</h3>
-      <el-form-item label="退款原因:" prop="name">{{form.refundReason||'--'}}</el-form-item>
-      <el-form-item label="退款数量:" prop="name">{{form.refundQuantity||'--'}}</el-form-item>
-      <el-form-item label="退款金额:" prop="name">{{form.refundAmount||'--'}}</el-form-item>
-      <el-form-item label="退款方式:" prop="name">原路返回</el-form-item>
-
-      <div><el-form-item label="退款说明:" prop="name">{{form.refundNotes||'无'}}</el-form-item></div>
-      <div><el-form-item label="退款时间:" prop="name">{{parseTime(form.refundApplyTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item></div>
-      <div v-if="form.auditStatus==1||form.auditStatus==2">
-        <div><el-form-item label="退款状态:" prop="name">{{dealAuditStatus(form.auditStatus)}}</el-form-item></div>
-        <div><el-form-item v-if="form.auditStatus==2" label=" 操作原因:" prop="name">{{form.auditNotes}}</el-form-item></div>
-        <div><el-form-item label="操作时间:" prop="name">{{parseTime(form.auditTime, '{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item></div>
-        <div><el-form-item label="操作人:" prop="name">{{form.auditUserName||'--'}}</el-form-item></div>
+      <div class="w20">
+        <h3>护工信息信息</h3>
+        <el-form-item label="护工姓名:" prop="name">{{ form.orderVo.orderWorkerChangeRecord.workerName}}</el-form-item>
+        <el-form-item label="电话:" prop="name">{{ form.orderVo.orderWorkerChangeRecord.workerPhoneNumber}}</el-form-item>
+        <el-form-item label="性别:" prop="name">{{ form.orderVo.orderWorkerChangeRecord.sex==1?'男':form.orderVo.orderWorkerChangeRecord.sex==2?'女':'--'}}</el-form-item>
+        <el-form-item label="分单时间:" prop="name">{{parseTime(form.orderVo.orderWorkerChangeRecord.createTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
+        <el-form-item label="操作老师:" prop="name">{{ form.orderVo.orderWorkerChangeRecord.operatingTeacherName}}</el-form-item>
+        <el-form-item label="开始时间:" prop="name">{{ parseTime(form.orderVo.orderWorkerChangeRecord.workerStartTime,'{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item>
+        <el-form-item label="结束时间:" prop="name">{{ parseTime(form.orderVo.orderWorkerChangeRecord.workerEndTime,'{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item>
+      </div>
+      <div>
+        <h3>退款信息</h3>
+        <el-form-item label="退款原因:" prop="name">{{ form.refundReason}}</el-form-item>
+        <el-form-item label="退款数量:" prop="name">{{ form.refundQuantity}}</el-form-item>
+        <el-form-item label="退款金额:" prop="name">{{ form.refundAmount}}</el-form-item>
+        <el-form-item label="退款方式:" prop="name">{{ form.refundWay}}</el-form-item>
+        <el-form-item class="w100" label="退款说明:" prop="name">{{ form.refundDesc}}</el-form-item>
+        <el-form-item class="w100" label="申请时间:" prop="name">{{ parseTime(form.createTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
+        <el-form-item class="w100" label="退款状态:" prop="name">
+          <div v-for="(v,i) in refundStatusList" :key="i" :type="v.tag" v-if="form.refundStatus==v.code">{{v.value}}</div>
+        </el-form-item>
+        <div v-if="form.refundStatus!=1">
+          <el-form-item class="w100" label="实退金额:" prop="name" v-if="form.actualRefundAmount">¥{{ form.actualRefundAmount}}</el-form-item>
+          <el-form-item class="w100" label="操作原因:" prop="name">{{ form.operationReason}}</el-form-item>
+          <el-form-item class="w100" label="操作时间: " prop="name">{{ parseTime(form.operationTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
+          <el-form-item class="w100" label="操作人:" prop="name">{{ form.operatorName}}</el-form-item>
+        </div>
       </div>
-      <el-form-item>
-        <el-button @click="back">返回</el-button>
-        <el-button type="primary" v-if="form.refundStatus==0" @click="passAudit(10)">同意退款</el-button>
-        <el-button type="primary" v-if="form.refundStatus==0" @click="dialogVisible=true">拒绝退款</el-button>
-      </el-form-item>
     </el-form>
-    <el-dialog title="拒绝退款" :visible.sync="dialogVisible" width="30%" :before-close="close">
-      <el-form :model="refuseForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
-        <el-form-item label="操作原因:" prop="auditNotes">
-          <el-input type="textarea" :rows="2" placeholder="请输入内容" v-model="refuseForm.auditNotes">
+    <div class="form-footer">
+      <el-button @click="back">返回</el-button>
+      <el-button v-if="form.refundStatus==1" type="primary" @click="openDialog(2)">同意退款</el-button>
+      <el-button v-if="form.refundStatus==1" type="danger" @click="openDialog(3)">拒绝退款</el-button>
+    </div>
+
+    <el-dialog :title="refundForm.refundStatus==2?'退款成功':'退款失败'" :visible.sync="dialogVisible" width="30%" :before-close="close">
+      <el-form :model="refundForm" ref="refundForm" :rules="rules" label-width="100px" class="demo-ruleForm">
+        <el-form-item label="实退金额" prop="refundAmount">
+          <el-input-number v-model="refundForm.refundAmount" controls-position="right" :min="0.01" :precision="2"></el-input-number>
+        </el-form-item>
+        <el-form-item label="操作原因" prop="refundReason" v-if="refundForm.refundStatus==3">
+          <el-input type="textarea" :rows="2" placeholder="请输入内容" v-model="refundForm.refundReason">
           </el-input>
+          <div class="hint">注意:如果有超出的订单金额的退款,需要备注说明</div>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="close">取 消</el-button>
-        <el-button type="primary" @click="refuseAudit()">确 定</el-button>
+        <el-button type="primary" @click="submit()">确 定</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { businessProductRefundInfo, businessProductRefundAudit } from '@/api/order.js'
+import { orderEnum, orderRefundEnum, orderRefundInfo, agreeOrRefuse } from '@/api/hospitalOrder.js'
+import { serviceProductEnum } from '@/api/service.js'
+
 export default {
+  dicts: ['patient_relationship'],
   data () {
     return {
       form: {
-        productOrder: {}
+        orderVo: {
+          hospitalVo: {},
+          patientVo: {},
+          orderWorkerChangeRecord: {}
+        }
       },
-      refuseForm: {},
-      refundStatusList: [
-        { label: '待处理', value: 0 },
-        { label: '审核通过', value: 1 },
-        { label: '审核拒绝', value: 2 },
+      couponList: [],
+      gameRecord: {},
+      statusList: [],
+      genderList: [
+        { label: '0', value: '未知' },
+        { label: '1', value: '男' },
+        { label: '2', value: '女' }
       ],
-      dialogVisible: false,
+      serviceUnitList: [],
+      refundStatusList: [],
       rules: {
-        auditNotes: [
-          { required: true, message: '请输入操作原因', trigger: 'blur' }
-        ],
+        refundAmount: [{ required: true, message: '请输入退款金额', trigger: 'blur' }]
       },
+      refundForm: {
+        refundReason: undefined,
+        refundAmount: undefined,
+      },
+      dialogVisible: false,
       loading: false
     }
   },
   created () {
-    this.refuseForm.refundOrderId = this.$route.query.refundOrderId
-    this.getDetails();
+    this.init()
   },
   methods: {
-    dealAuditStatus (status) {
-      for (let i = 0; i < this.refundStatusList.length; i++) {
-        if (this.refundStatusList[i].value == status) {
-          return this.refundStatusList[i].label
+    init () {
+      this.getDetails();
+      // this.getOrderEnum();
+      // this.getServiceUnitList();
+      this.getOrderRefundEnum()
+    },
+    // 获取服务单位列表
+    getServiceUnitList () {
+      serviceProductEnum().then(res => {
+        this.serviceUnitList = res.data.serviceUnit
+      })
+    },
+    dealStatus (status) {
+      for (let i = 0; i < this.statusList.length; i++) {
+        if (this.statusList[i].code == status) {
+          return this.statusList[i].value
         }
       }
     },
-    close () {
-      this.refuseForm = {
-        auditNotes: undefined,
-      };
-      this.$refs.ruleForm.resetFields();
-      this.dialogVisible = false
+    dealGender (gender) {
+      for (let i = 0; i < this.genderList.length; i++) {
+        if (this.genderList[i].label == gender) {
+          return this.genderList[i].value
+        }
+      }
     },
-    getDetails () {
-      businessProductRefundInfo(this.$route.query.refundOrderId).then(res => {
-        this.form = res.data;
-        this.refuseForm = {
-          refundOrderId: this.$route.query.refundOrderId,
-          refundOrderNumber: this.form.refundOrderNumber
+    dealServiceUnitList (val) {
+      for (let i = 0; i < this.serviceUnitList.length; i++) {
+        if (this.serviceUnitList[i].code == val) {
+          return this.serviceUnitList[i].value
         }
-      })
+      }
     },
-    // 同意退款
-    passAudit () {
-      this.$modal.confirm('确认同意退款?').then(() => {
-        this.loading = true;
-        this.refuseForm.auditStatus = 1
-        return businessProductRefundAudit(this.refuseForm);
-      }).then(() => {
-        this.loading = false;
-        this.$modal.msgSuccess("同意退款成功");
-        this.$router.go(-1)
-      }).finally(() => {
-        this.loading = false;
-      });
+    close () {
+      this.refundForm = {
+        refundReason: undefined,
+        refundAmount: undefined,
+      };
+      this.resetForm("refundForm");
+      this.dialogVisible = false;
+    },
+    openDialog (status) {
+      this.refundForm.refundStatus = status;
+      this.dialogVisible = true;
     },
-    // 拒绝退款
-    refuseAudit () {
-      this.$refs.ruleForm.validate((valid) => {
+    submit () {
+      this.$refs.refundForm.validate((valid) => {
         if (valid) {
-          this.$modal.confirm('确认拒绝退款').then(() => {
-            this.loading = true;
-            this.refuseForm.auditStatus = 2
-            this.refuseForm.refundStatus = 3
-            return businessProductRefundAudit(this.refuseForm);
-          }).then(() => {
-            this.loading = false;
-            this.$modal.msgSuccess("拒绝退款成功");
-            this.$router.go(-1)
-          }).finally(() => {
-            this.loading = false;
-          });
+          agreeOrRefuse(this.refundForm).then(res => {
+            this.$message({
+              message: '提交成功',
+              type: 'success'
+            })
+            this.close();
+          })
         }
       })
     },
     back () {
       this.$router.go(-1)
     },
-  },
+    getOrderEnum () {
+      orderEnum().then(res => {
+        this.statusList = res.data.orderStatus;
+      })
+    },
+    getOrderRefundEnum () {
+      orderRefundEnum().then(res => {
+        this.refundStatusList = res.data.refundStatus;
+      })
+    },
+    getDetails () {
+      this.loading = true;
+      orderRefundInfo(this.$route.query.id).then(res => {
+        this.form = res.data
+      }).finally(() => {
+        this.loading = false;
+      })
+    },
+  }
+
 }
 </script>
 
@@ -170,4 +216,31 @@ h3 {
 .el-form--inline .el-form-item {
   width: 24%;
 }
+.active {
+  color: rgb(64, 158, 255);
+  cursor: pointer;
+}
+.form-footer {
+  margin-top: 20px;
+  text-align: center;
+}
+::v-deep .el-form-item__content {
+  width: calc(100% - 120px);
+}
+.w20 {
+  .el-form-item {
+    width: calc(20% - 10px);
+  }
+}
+.el-rate {
+  height: 36px;
+  line-height: 46px;
+}
+.w100 {
+  width: 100% !important;
+}
+.hint {
+  font-size: 12px;
+  color: red;
+}
 </style>

+ 47 - 55
src/views/order/afterSaleOrder/index.vue

@@ -1,40 +1,32 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="所属商家" prop="businessId">
-        <el-select v-model="queryParams.businessId" filterable placeholder="请选择所属商家" size="small" clearable style="width: 100%">
-          <el-option v-for="(v,i) in shopList" :key="i" :label="v.businessName" :value="v.businessId" />
+      <el-form-item label="所属医院" prop="hospitalId">
+        <el-select v-model="queryParams.hospitalId" filterable placeholder="请选择下单医院" size="small" clearable style="width: 100%">
+          <el-option v-for="(v,i) in shopList" :key="i" :label="v.name" :value="v.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="退款订单号" prop="refundOrderNumber">
-        <el-input v-model="queryParams.refundOrderNumber" placeholder="请输入退款订单号" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="退款订单号" prop="orderRefundNo">
+        <el-input v-model="queryParams.orderRefundNo" placeholder="请输入退款订单号" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="下单手机号" prop="userPhone">
-        <el-input v-model="queryParams.userPhone" placeholder="请输入用户手机号" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="下单手机号" prop="userMobile">
+        <el-input v-model="queryParams.userMobile" placeholder="请输入下单手机号" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="商品名称" prop="businessProductName">
-        <el-input v-model="queryParams.businessProductName" placeholder="请输入商品名称" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="服务名称" prop="serviceName">
+        <el-input v-model="queryParams.serviceName" placeholder="请输入服务名称" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="退款时间">
         <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
       </el-form-item>
-      <el-form-item label="状态" prop="refundStatus">
-        <el-select v-model="queryParams.refundStatus" filterable placeholder="请选择状态" size="small" clearable style="width: 100%">
-          <el-option label="待处理" :value="0" />
-          <el-option label="已退款" :value="1" />
-          <el-option label="退款失败" :value="2" />
-          <el-option label="退款拒绝" :value="3" />
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button type="primary" plain size="mini" @click="handleExport">导出订单</el-button>
-      </el-col>
+      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
@@ -45,27 +37,28 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="商家ID" align="center" prop="businessId" />
-      <el-table-column label="退款订单号" align="center" prop="refundOrderNumber" />
-      <el-table-column label="商品名称" align="center" prop="businessProductName" />
+      <el-table-column label="退款订单号" align="center" prop="orderRefundNo" />
+      <el-table-column label="服务名称" align="center" prop="serviceName" />
       <el-table-column label="销售价格" align="center" prop="sellingPrice" />
-      <el-table-column label="购买数" align="center" prop="buyQuantity" />
+      <el-table-column label="购买数" align="center" prop="orderNum" />
       <el-table-column label="退款数" align="center" prop="refundQuantity" />
-      <el-table-column label="实付金额" align="center" prop="payAmount" />
+      <el-table-column label="应付金额" align="center" prop="totalPrice" />
       <el-table-column label="应退金额" align="center" prop="refundAmount" />
-      <el-table-column label="下单手机号" align="center" prop="userPhone" />
-      <el-table-column label="所属商家" align="center" prop="businessName" />
-      <el-table-column label="申请时间" align="center" prop="refundApplyTime" width="200">
+      <el-table-column label="实退金额" align="center" prop="actualRefundAmount">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.refundApplyTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{scope.row.actualRefundAmount||'-'}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="下单手机号" align="center" prop="orderVo.userMobile" />
+      <el-table-column label="所属医院" align="center" prop="orderVo.hospitalName" />
+      <el-table-column label="申请时间" align="center" prop="createTime" width="200">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="状态" align="center" prop="refundStatus">
         <template slot-scope="{row}">
-          <el-tag v-if="row.refundStatus===0">待处理</el-tag>
-          <el-tag type="info" v-if="row.refundStatus===1">已退款</el-tag>
-          <el-tag type="danger" v-if="row.refundStatus===2">退款失败</el-tag>
-          <el-tag type="warning" v-if="row.refundStatus===3">退款拒绝</el-tag>
+          <div v-for="(v,i) in refundStatusList" :key="i" :type="v.tag" v-if="row.refundStatus==v.code">{{v.value}}</div>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -81,8 +74,8 @@
 </template>
 
 <script>
-import { businessProductRefundPage } from '@/api/order.js'
-import { businessList } from "@/api/shop"
+import { orderRefundPage, orderRefundEnum } from '@/api/hospitalOrder.js'
+import { hospitalSimpleList } from "@/api/hospital.js"
 export default {
   data () {
     return {
@@ -106,11 +99,10 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        businessId: undefined,
-        relatedOrderNo: undefined,
-        userPhone: undefined,
-        businessProductName: undefined,
-        refundStatus: undefined
+        hospitalId: undefined,
+        orderRefundNo: undefined,
+        userMobile: undefined,
+        serviceName: undefined,
       },
       daterangeCreateTime: [],
       statusList: [
@@ -118,7 +110,8 @@ export default {
         { label: '审核通过', value: 10 },
         { label: '审核拒绝', value: 20 },
       ],
-      shopList: []
+      shopList: [],
+      refundStatusList: []
     }
   },
   created () {
@@ -129,14 +122,20 @@ export default {
       this.queryParams.refundStatus = Number(this.$route.query.refundStatus)
     }
     this.getShopList()
-    this.getList()
+    this.getList();
+    this.getOrderRefundEnum();
   },
   methods: {
 
     goDetails (row = {}) {
       this.$router.push({
         path: '/order/afterSaleOrderDetails',
-        query: { refundOrderId: row.refundOrderId }
+        query: { id: row.id }
+      })
+    },
+    getOrderRefundEnum () {
+      orderRefundEnum().then(res => {
+        this.refundStatusList = res.data.refundStatus;
       })
     },
     //  导出订单
@@ -146,7 +145,7 @@ export default {
       }, `售后订单_${new Date().getTime()}.xlsx`)
     },
     getShopList () {
-      businessList().then(res => {
+      hospitalSimpleList().then(res => {
         this.shopList = res.data
       })
     },
@@ -159,20 +158,13 @@ export default {
     /** 查询测试单表列表 */
     getList () {
       this.loading = true;
-      this.queryParams["refundTimeStart"] = undefined;
-      this.queryParams["refundTimeEnd"] = undefined;
+      this.queryParams["startTime"] = undefined;
+      this.queryParams["endTime"] = undefined;
       if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
-        this.queryParams["refundTimeStart"] = this.daterangeCreateTime[0];
-        this.queryParams["refundTimeEnd"] = this.daterangeCreateTime[1];
+        this.queryParams["startTime"] = this.daterangeCreateTime[0];
+        this.queryParams["endTime"] = this.daterangeCreateTime[1];
       }
-      businessProductRefundPage(this.queryParams).then(response => {
-        // response.rows.map(v => {
-        //   let arr = []
-        //   v.businessProductCategoryList.map(k => {
-        //     arr.push(k.categoryName)
-        //   })
-        //   v.businessProductCategoryText = arr.join(",")
-        // })
+      orderRefundPage(this.queryParams).then(response => {
         this.list = response.rows;
         this.total = response.total;
         this.loading = false;

+ 43 - 82
src/views/order/evaluation/index.vue

@@ -1,22 +1,21 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="下单医院" prop="adName">
-        <el-select v-model="queryParams.status" placeholder="请输入" clearable size="small" style="width: 240px">
-          <el-option label="上架" :value="true" />
-          <el-option label="下架" :value="false" />
+      <el-form-item label="下单医院" prop="hospitalId">
+        <el-select v-model="queryParams.hospitalId" filterable placeholder="请选择下单医院" size="small" clearable style="width: 100%">
+          <el-option v-for="(v,i) in shopList" :key="i" :label="v.name" :value="v.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="订单号" prop="adName">
-        <el-input v-model="queryParams.adName" placeholder="请输入" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="订单号" prop="orderNo">
+        <el-input v-model="queryParams.orderNo" placeholder="请输入订单号" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="订单手机号" prop="adName" label-width="90px">
-        <el-input v-model="queryParams.adName" placeholder="请输入" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="下单手机号" prop="userMobile">
+        <el-input v-model="queryParams.userMobile" placeholder="请输入下单手机号" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="服务名称" prop="adName">
-        <el-input v-model="queryParams.adName" placeholder="请输入" clearable size="small" @keyup.enter.native="handleQuery" />
+      <el-form-item label="服务名称" prop="serviceName">
+        <el-input v-model="queryParams.serviceName" placeholder="请输入服务名称" maxlength="30" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="下单时间">
+      <el-form-item label="下单时间" prop="">
         <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
       </el-form-item>
       <el-form-item>
@@ -32,7 +31,7 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="list">
       <el-table-column type="index" width="55" label="序号" align="center">
         <template slot-scope="scope">
           <div>
@@ -40,23 +39,24 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="订单编号" align="center" prop="locationCodeText" />
-      <el-table-column label="服务名称" align="center" prop="image" />
-      <el-table-column label="下单手机号" align="center" prop="adName" />
-      <el-table-column label="下单医院" align="center" prop="adName" />
-      <el-table-column label="护工姓名" align="center" prop="adName" />
-      <el-table-column label="护工手机号" align="center" prop="adName" />
-      <el-table-column label="着装仪态" align="center" prop="adName" />
-      <el-table-column label="沟通能力" align="center" prop="adName" />
-      <el-table-column label="文字评价" align="center" prop="adName" show-overflow-tooltip />
-      <el-table-column label="评价时间" align="center" prop="createTime" width="180">
+      <el-table-column label="订单编号" align="center" prop="orderNo" />
+      <el-table-column label="服务名称" align="center" prop="serviceName" />
+      <el-table-column label="下单手机号" align="center" prop="userMobile" />
+      <el-table-column label="下单医院" align="center" prop="hospitalName" />
+      <el-table-column label="护工姓名" align="center" prop="orderWorkerChangeRecord.workerName" />
+      <el-table-column label="护工手机号" align="center" prop="orderWorkerChangeRecord.workerPhoneNumber" />
+      <el-table-column label="服务态度" align="center" prop="orderReviews.serviceAttitude" />
+      <el-table-column label="着装仪态" align="center" prop="orderReviews.dressAppearance" />
+      <el-table-column label="沟通能力" align="center" prop="orderReviews.communicationAbility" />
+      <el-table-column label="文字评价" align="center" prop="orderReviews.content" show-overflow-tooltip />
+      <el-table-column label="评价时间" align="center" prop="orderReviews.createTime" width="180">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ parseTime(scope.row.orderReviews.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text">查看订单</el-button>
+          <el-button size="mini" type="text" @click="goDetails(scope.row)">查看订单</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -66,7 +66,7 @@
 </template>
 
 <script>
-import { bannerAdd, bannerEdit, bannerPage, bannerInfo, bannerSetStatus, bannerDelSingle } from "@/api/banner.js";
+import { orderReviewsPage } from '@/api/hospitalOrder.js'
 import { getToken } from "@/utils/auth";
 export default {
   // dicts: ['ad_location', 'internal_page'],
@@ -98,35 +98,45 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        adName: undefined,
-        status: undefined,
-        locationCode: undefined
       },
       // 表单参数
       form: {},
       // 表单校验
       rules: {
       },
+      shopList: [],
     };
   },
   created () {
     this.getList();
+    this.getShopList();
   },
   methods: {
+    getShopList () {
+      hospitalSimpleList().then(res => {
+        this.shopList = res.data
+      })
+    },
     getList () {
       this.loading = true;
-      this.queryParams["createTimeStart"] = undefined;
-      this.queryParams["createTimeEnd"] = undefined;
+      this.queryParams["startTime"] = undefined;
+      this.queryParams["endTime"] = undefined;
       if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
-        this.queryParams["createTimeStart"] = this.daterangeCreateTime[0] + ' 00:00:00';
-        this.queryParams["createTimeEnd"] = this.daterangeCreateTime[1] + ' 23:59:59';
+        this.queryParams["startTime"] = this.daterangeCreateTime[0];
+        this.queryParams["endTime"] = this.daterangeCreateTime[1];
       }
-      bannerPage(this.queryParams).then(response => {
+      orderReviewsPage(this.queryParams).then(response => {
         this.list = response.rows;
         this.total = response.total;
         this.loading = false;
       });
     },
+    goDetails (row) {
+      this.$router.push({
+        path: '/order/orderList/details',
+        query: { id: row.id }
+      })
+    },
     //  导出
     handleExport () {
       this.download('/order/order/export', {
@@ -144,55 +154,6 @@ export default {
       this.resetForm("queryForm");
       this.handleQuery();
     },
-    // 多选框选中数据
-    handleSelectionChange (selection) {
-      this.ids = selection.map(item => item.adId)
-      this.single = selection.length !== 1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd () {
-      this.reset();
-      this.open = true;
-      this.title = "添加广告";
-    },
-    /** 修改按钮操作 */
-    handleUpdate (row) {
-      this.loading = true;
-      this.reset();
-      const id = row.adId || this.ids
-      bannerInfo(id).then(response => {
-        this.loading = false;
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改广告";
-      });
-    },
-    /** 提交按钮 */
-    submitForm () {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.buttonLoading = true;
-          if (this.form.adId != null) {
-            bannerEdit(this.form).then(response => {
-              this.$modal.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            }).finally(() => {
-              this.buttonLoading = false;
-            });
-          } else {
-            bannerAdd(this.form).then(response => {
-              this.$modal.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            }).finally(() => {
-              this.buttonLoading = false;
-            });
-          }
-        }
-      });
-    },
   }
 };
 </script>

+ 95 - 20
src/views/order/orderList/details.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" inline>
+    <el-form :model="form" ref="form" inline v-loading="loading">
       <h3>基础信息</h3>
       <el-form-item label="订单号:" prop="name">{{form.orderNo}}</el-form-item>
       <br>
@@ -21,14 +21,75 @@
       <el-form-item label="销售价格:" prop="name">{{form.sellingPrice}}</el-form-item>
       <el-form-item label="应付金额:" prop="name">{{form.totalPrice}}</el-form-item>
       <el-form-item label="特殊需求:" prop="name">{{form.remarks||'-'}}</el-form-item>
-      <h3>就诊人信息</h3>
-      <el-form-item label="就诊人姓名:" prop="name">{{ form.patientVo.name}}</el-form-item>
-      <el-form-item label="电话:" prop="name">{{form.patientVo.mobile}}</el-form-item>
-      <el-form-item label="性别:" prop="name">{{dealGender(form.patientVo.gender)}}</el-form-item>
-      <el-form-item label="年龄:" prop="name">{{form.patientVo.age}}</el-form-item>
-      <el-form-item label="关系:" prop="name">
-        <div v-for="(v,i) in dict.type.patient_relationship" :key="i" v-if="v.value==form.patientVo.relationship">{{v.label}}</div>
-      </el-form-item>
+      <div class="w20">
+        <h3>就诊人信息</h3>
+        <el-form-item label="就诊人姓名:" prop="name">{{ form.patientVo.name}}</el-form-item>
+        <el-form-item label="电话:" prop="name">{{form.patientVo.mobile}}</el-form-item>
+        <el-form-item label="性别:" prop="name">{{dealGender(form.patientVo.gender)}}</el-form-item>
+        <el-form-item label="年龄:" prop="name">{{form.patientVo.age}}</el-form-item>
+        <el-form-item label="关系:" prop="name">
+          <div v-for="(v,i) in dict.type.patient_relationship" :key="i" v-if="v.value==form.patientVo.relationship">{{v.label}}</div>
+        </el-form-item>
+      </div>
+      <div class="w20" v-if="form.status==2||form.status==3||form.status==4||form.status==5">
+        <h3>护工信息信息</h3>
+        <el-form-item label="护工姓名:" prop="name">{{ form.orderWorkerChangeRecord.workerName}}</el-form-item>
+        <el-form-item label="电话:" prop="name">{{ form.orderWorkerChangeRecord.workerPhoneNumber}}</el-form-item>
+        <el-form-item label="性别:" prop="name">{{ form.orderWorkerChangeRecord.sex==1?'男':form.orderWorkerChangeRecord.sex==2?'女':'--'}}</el-form-item>
+        <el-form-item label="分单时间:" prop="name">{{parseTime(form.orderWorkerChangeRecord.createTime, '{y}-{m}-{d} {h}:{i}')}}</el-form-item>
+        <el-form-item label="操作老师:" prop="name">{{ form.orderWorkerChangeRecord.operatingTeacherName}}</el-form-item>
+        <el-form-item label="开始时间:" prop="name">{{ parseTime(form.orderWorkerChangeRecord.workerStartTime,'{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item>
+        <el-form-item label="结束时间:" prop="name">{{ parseTime(form.orderWorkerChangeRecord.workerEndTime,'{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item>
+      </div>
+      <div class="w50" v-if="form.status==6">
+        <h3>取消信息</h3>
+        <el-form-item label="取消原因:" prop="name">{{ form.cancellationReason}}</el-form-item>
+        <el-form-item label="取消时间:" prop="name">{{ form.cancellationTime}}</el-form-item>
+      </div>
+      <div v-if="form.status==5">
+        <h3>评价信息</h3>
+        <el-form-item label="服务态度" prop="name"> <el-rate disabled v-model="form.orderReviews.serviceAttitude"></el-rate></el-form-item>
+        <el-form-item label="着装仪态" prop="name"> <el-rate disabled v-model="form.orderReviews.dressAppearance"></el-rate></el-form-item>
+        <el-form-item label="沟通能力" prop="name"> <el-rate disabled v-model="form.orderReviews.communicationAbility"></el-rate></el-form-item>
+        <br>
+        <el-form-item class="w100" label="文字评价" prop="name"> <el-rate disabled v-model="form.orderReviews.content"></el-rate></el-form-item>
+        <el-form-item class="w100" label="评价时间" prop="name">{{ parseTime(form.orderReviews.createTime,'{y}-{m}-{d} {h}:{i}')||'--'}}</el-form-item>
+      </div>
+      <div class="w50" v-if="form.hasRefund">
+        <h3>退款信息</h3>
+        <el-table :data="form.refundList">
+          <el-table-column type="index" width="55" label="序号" align="center">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.$index + 1 }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="退款订单号" align="center" prop="orderRefundNo" />
+          <el-table-column label="服务名称" align="center" prop="serviceName" />
+          <el-table-column label="销售价格" align="center" prop="sellingPrice" />
+          <el-table-column label="购买数" align="center" prop="orderNum" />
+          <el-table-column label="实付金额" align="center" prop="payPrice" />
+          <el-table-column label="退款数" align="center" prop="refundQuantity" />
+          <el-table-column label="应退金额" align="center" prop="totalPrice" />
+          <el-table-column label="实退金额" align="center" prop="actualRefundAmount" />
+          <el-table-column label="申请时间" align="center" prop="createTime">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" align="center" prop="refundStatus">
+            <template slot-scope="{row}">
+              <div v-for="(v,i) in refundStatusList" :key="i" :type="v.tag" v-if="row.refundStatus==v.code">{{v.value}}</div>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button size="mini" type="text">查看</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
     </el-form>
     <div class="form-footer">
       <el-button @click="back">返回</el-button>
@@ -37,8 +98,7 @@
 </template>
 
 <script>
-import { businessProductOrderInfo, orderCouponList, verification } from '@/api/order.js'
-import { orderInfo, orderEnum } from '@/api/hospitalOrder.js'
+import { orderInfo, orderEnum, orderRefundEnum } from '@/api/hospitalOrder.js'
 import { serviceProductEnum } from '@/api/service.js'
 
 export default {
@@ -49,13 +109,6 @@ export default {
         hospitalVo: {},
         patientVo: {}
       },
-      couponStatusList: [
-        { label: '待使用', value: 0 },
-        { label: '已使用', value: 10 },
-        { label: '已退款', value: 20 },
-        { label: '退款中', value: 21 },
-        { label: '已过期', value: 30 },
-      ],
       couponList: [],
       gameRecord: {},
       statusList: [],
@@ -64,7 +117,9 @@ export default {
         { label: '1', value: '男' },
         { label: '2', value: '女' }
       ],
-      serviceUnitList: []
+      serviceUnitList: [],
+      refundStatusList: [],
+      loading: false
     }
   },
   created () {
@@ -75,6 +130,7 @@ export default {
       this.getDetails();
       this.getOrderEnum();
       this.getServiceUnitList();
+      this.getOrderRefundEnum()
     },
     // 获取服务单位列表
     getServiceUnitList () {
@@ -111,10 +167,17 @@ export default {
         this.statusList = res.data.orderStatus;
       })
     },
+    getOrderRefundEnum () {
+      orderRefundEnum().then(res => {
+        this.refundStatusList = res.data.refundStatus;
+      })
+    },
     getDetails () {
+      this.loading = true
       orderInfo(this.$route.query.id).then(res => {
         this.form = res.data
-        // this.getGameRecordPage(res.data.orderNumber)
+      }).finally(() => {
+        this.loading = false
       })
     },
   }
@@ -140,4 +203,16 @@ h3 {
 ::v-deep .el-form-item__content {
   width: calc(100% - 120px);
 }
+.w20 {
+  .el-form-item {
+    width: calc(20% - 10px);
+  }
+}
+.el-rate {
+  height: 36px;
+  line-height: 46px;
+}
+.w100 {
+  width: 100% !important;
+}
 </style>

+ 2 - 2
src/views/order/orderList/index.vue

@@ -86,7 +86,7 @@
 
     <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
 
-    <el-dialog title="配置预约时间" :visible.sync="dialogVisible" width="650px" @close="close">
+    <!-- <el-dialog title="配置预约时间" :visible.sync="dialogVisible" width="650px" @close="close">
       <el-form :model="reserveForm" label-width="100px" size="small">
         <el-form-item label="选择日期" required>
           <el-select v-model="reserveForm.reservationDate" placeholder="请选择日期" style="width: 100%" @change="reservationDateChange">
@@ -103,7 +103,7 @@
         <el-button @click="close()">取 消</el-button>
         <el-button type="primary" :loading="btnLoading" @click="submit">确 定</el-button>
       </div>
-    </el-dialog>
+    </el-dialog> -->
   </div>
 </template>
 

+ 6 - 3
src/views/teacher/index.vue

@@ -8,7 +8,7 @@
         <el-input v-model="queryParams.phoneNumber" placeholder="请输入" maxlength="11" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="性别" prop="sex">
-        <el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small" style="width: 240px">
+        <el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small" style="width: 215px">
           <el-option label="男" value="1" />
           <el-option label="女" value="2" />
         </el-select>
@@ -25,7 +25,7 @@
         <el-date-picker v-model="daterangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
       </el-form-item>
       <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请输入状态" clearable size="small" style="width: 240px">
+        <el-select v-model="queryParams.status" placeholder="请输入状态" clearable size="small" style="width: 215px">
           <el-option label="上架" :value="true" />
           <el-option label="下架" :value="false" />
         </el-select>
@@ -314,6 +314,7 @@ export default {
                 return v
               }
             });
+            this.$forceUpdate();
           })
         } else {
           this.form.departmentIds[index].relList = []
@@ -443,7 +444,9 @@ export default {
       });
     },
     handleExport () {
-
+      this.download('/info/managementTeacher/export', {
+        ...this.queryParams
+      }, `管理老师列表_${new Date().getTime()}.xlsx`)
     },
     /** 提交按钮 */
     submitForm () {