wanglizhong
2025-05-01 7c68b5b04615626166bd1b933408ed82063192ff
feat:add order
3个文件已添加
4个文件已修改
241 ■■■■■ 已修改文件
doc/订单详情.png 补丁 | 查看 | 原始文档 | blame | 历史
doc/订单详情.rp 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/system/order.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/router/index.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/order/detail.vue 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/ry_20250417.sql 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/¶©µ¥ÏêÇé.png
doc/¶©µ¥ÏêÇé.rp
Binary files differ
ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@
        druid:
            # ä¸»åº“数据源
            master:
                url: jdbc:mysql://120.25.98.119:3307/rouyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                url: jdbc:mysql://120.25.98.119:3307/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: abcd1234
            # ä»Žåº“数据源
ruoyi-ui/src/api/system/order.js
@@ -60,3 +60,11 @@
    params: query
  })
// æŸ¥è¯¢è®¢å•详情
export function getOrderDetail(orderId) {
  return request({
    url: '/system/order/' + orderId,
    method: 'get'
  })
}
ruoyi-ui/src/router/index.js
@@ -93,6 +93,13 @@
        meta: { title: '个人中心', icon: 'user' }
      }
    ]
  },
  {
    path: 'order/detail/:id',
    component: () => import('@/views/system/order/detail'),
    name: 'OrderDetail',
    meta: { title: '订单详情' },
    hidden: true
  }
]
ruoyi-ui/src/views/system/order/detail.vue
New file
@@ -0,0 +1,221 @@
<template>
  <div class="app-container">
    <el-card class="box-card">
      <div slot="header" class="clearfix">
        <span>订单编号:{{ orderInfo.orderNo }}</span>
      </div>
      <el-row :gutter="20">
        <!-- è®¢å•基本信息 -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>订单基本信息</b></div>
            <el-descriptions :column="isMobile ? 1 : 2" border>
              <el-descriptions-item label="外部编号">{{ orderInfo.externalNo }}</el-descriptions-item>
              <el-descriptions-item label="下单时间">{{ orderInfo.orderTime }}</el-descriptions-item>
              <el-descriptions-item label="订单状态">{{ orderInfo.orderStatus }}</el-descriptions-item>
              <el-descriptions-item label="订单来源">{{ orderInfo.orderSource }}</el-descriptions-item>
              <el-descriptions-item label="单据状态">{{ orderInfo.documentStatus }}</el-descriptions-item>
              <el-descriptions-item label="成交价格">{{ orderInfo.price }}元</el-descriptions-item>
              <el-descriptions-item label="客户预约时间">{{ orderInfo.appointmentTime }}</el-descriptions-item>
              <el-descriptions-item label="派单时间">{{ orderInfo.dispatchTime }}</el-descriptions-item>
            </el-descriptions>
          </el-card>
        </el-col>
        <!-- å®¢æˆ·ä¿¡æ¯ -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>客户信息</b></div>
            <el-descriptions :column="isMobile ? 1 : 2" border>
              <el-descriptions-item label="联系人">{{ patientInfo.contactName }}</el-descriptions-item>
              <el-descriptions-item label="联系电话">{{ patientInfo.contactPhone }}</el-descriptions-item>
              <el-descriptions-item label="患者姓名">{{ patientInfo.patientName }}</el-descriptions-item>
              <el-descriptions-item label="患者年龄">{{ patientInfo.patientAge }}</el-descriptions-item>
              <el-descriptions-item label="患者性别">{{ patientInfo.patientGender }}</el-descriptions-item>
              <el-descriptions-item label="患者体重">{{ patientInfo.patientWeight }}</el-descriptions-item>
            </el-descriptions>
          </el-card>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <!-- æœåŠ¡è¦æ±‚ -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>服务要求</b></div>
            <el-descriptions :column="1" border>
              <el-descriptions-item label="出发地">{{ serviceInfo.startAddress }}</el-descriptions-item>
              <el-descriptions-item label="出发地位置">{{ serviceInfo.startLocation }}</el-descriptions-item>
              <el-descriptions-item label="目的地">{{ serviceInfo.endAddress }}</el-descriptions-item>
              <el-descriptions-item label="目的地位置">{{ serviceInfo.endLocation }}</el-descriptions-item>
              <el-descriptions-item label="转运里程">{{ serviceInfo.distance }}</el-descriptions-item>
              <el-descriptions-item label="搬抬服务">{{ serviceInfo.liftService }}</el-descriptions-item>
              <el-descriptions-item label="搬抬楼层">{{ serviceInfo.liftFloor }}</el-descriptions-item>
              <el-descriptions-item label="医护要求">{{ serviceInfo.medicalStaff }}</el-descriptions-item>
            </el-descriptions>
          </el-card>
        </el-col>
        <!-- ç—…历 -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>病历</b></div>
            <el-descriptions :column="1" border>
              <el-descriptions-item label="是否有意识">{{ medicalInfo.hasConsciousness }}</el-descriptions-item>
              <el-descriptions-item label="病人情况">{{ medicalInfo.patientCondition }}</el-descriptions-item>
              <el-descriptions-item label="使用呼吸机">{{ medicalInfo.useVentilator }}</el-descriptions-item>
              <el-descriptions-item label="诊断病情">{{ medicalInfo.diagnosis }}</el-descriptions-item>
            </el-descriptions>
          </el-card>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <!-- è°ƒåº¦ä¿¡æ¯ -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>调度信息</b></div>
            <el-descriptions :column="isMobile ? 1 : 2" border>
              <el-descriptions-item label="调度时间">{{ dispatchInfo.dispatchTime }}</el-descriptions-item>
              <el-descriptions-item label="调度状态">{{ dispatchInfo.dispatchStatus }}</el-descriptions-item>
              <el-descriptions-item label="司机">{{ dispatchInfo.driver }}</el-descriptions-item>
              <el-descriptions-item label="车牌">{{ dispatchInfo.carNo }}</el-descriptions-item>
              <el-descriptions-item label="医生">{{ dispatchInfo.doctor }}</el-descriptions-item>
              <el-descriptions-item label="职位">{{ dispatchInfo.doctorPosition }}</el-descriptions-item>
              <el-descriptions-item label="护士">{{ dispatchInfo.nurse }}</el-descriptions-item>
            </el-descriptions>
          </el-card>
        </el-col>
        <!-- æ”¶æ¬¾ä¿¡æ¯ -->
        <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
          <el-card class="inner-card">
            <div slot="header"><b>收款信息</b></div>
            <el-table
              :data="paymentInfo"
              border
              style="width: 100%"
              :size="isMobile ? 'mini' : 'medium'"
              class="responsive-table">
              <el-table-column prop="paymentNo" label="收款流水" min-width="120" />
              <el-table-column prop="paymentTime" label="收款时间" min-width="140" />
              <el-table-column prop="amount" label="金额" min-width="100" />
              <el-table-column prop="method" label="方式" min-width="100" />
              <el-table-column prop="remark" label="备注" min-width="120" />
            </el-table>
          </el-card>
        </el-col>
      </el-row>
      <!-- è¿è¡Œæƒ…况 -->
      <el-row>
        <el-col :span="24">
          <el-card class="inner-card">
            <div slot="header">
              <b>运行情况</b>
              <span style="float: right">粤A102311</span>
            </div>
            <el-table
              :data="operationInfo"
              border
              style="width: 100%"
              :size="isMobile ? 'mini' : 'medium'"
              class="responsive-table">
              <el-table-column prop="status" label="出车状态" min-width="100" />
              <el-table-column prop="operator" label="操作人" min-width="100" />
              <el-table-column prop="operateTime" label="操作时间" min-width="140" />
              <el-table-column prop="location" label="坐标位置" min-width="200" show-overflow-tooltip />
            </el-table>
          </el-card>
        </el-col>
      </el-row>
    </el-card>
  </div>
</template>
<script>
import { getOrderDetail } from '@/api/system/order'
export default {
  name: 'OrderDetail',
  data() {
    return {
      // åˆå§‹åŒ–为空对象
      orderInfo: {},
      patientInfo: {},
      serviceInfo: {},
      medicalInfo: {},
      dispatchInfo: {},
      paymentInfo: [],
      operationInfo: [],
      screenWidth: document.documentElement.clientWidth // å±å¹•宽度
    }
  },
  computed: {
    isMobile() {
      return this.screenWidth <= 768
    }
  },
  created() {
    const orderId = this.$route.params.id
    this.getDetail(orderId)
    // ç›‘听窗口大小变化
    window.addEventListener('resize', this.handleResize)
  },
  beforeDestroy() {
    // ç»„件销毁前移除监听器
    window.removeEventListener('resize', this.handleResize)
  },
  methods: {
    /** èŽ·å–è®¢å•è¯¦æƒ… */
    getDetail(orderId) {
      getOrderDetail(orderId).then(response => {
        const { data } = response
        // æ ¹æ®åŽç«¯è¿”回的数据结构设置各个对象的值
        this.orderInfo = data.orderInfo || {}
        this.patientInfo = data.patientInfo || {}
        this.serviceInfo = data.serviceInfo || {}
        this.medicalInfo = data.medicalInfo || {}
        this.dispatchInfo = data.dispatchInfo || {}
        this.paymentInfo = data.paymentInfo || []
        this.operationInfo = data.operationInfo || []
      })
    },
    // å¤„理窗口大小变化
    handleResize() {
      this.screenWidth = document.documentElement.clientWidth
    }
  }
}
</script>
<style scoped>
.inner-card {
  margin-bottom: 20px;
}
.el-card ::v-deep .el-card__header {
  padding: 10px 20px;
  background-color: #f5f7fa;
}
.el-descriptions {
  margin: 10px 0;
}
.el-descriptions-item {
  margin-bottom: 0;
}
/* å“åº”式表格样式 */
.responsive-table {
  width: 100%;
  overflow-x: auto;
}
@media screen and (max-width: 768px) {
  .el-card { margin: 10px 0; }
  .el-row { margin-left: 0 !important; margin-right: 0 !important; }
  .el-col { padding-left: 0 !important; padding-right: 0 !important; }
  .box-card { border-radius: 0; }
  .inner-card { margin-bottom: 10px; }
  .el-descriptions-item { padding: 8px !important; }
  .el-descriptions-item__label { width: 100px !important; }
}
</style>
sql/ry_20250417.sql
@@ -186,7 +186,8 @@
insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
-- æ–°å¢žæœåŠ¡å•èœå•
insert into sys_menu values('2000', '服务单管理', '1', '10', 'serviceOrder', 'system/serviceOrder/index', '', 'serviceOrder', 1, 0, 'C', '0', '0', 'system:serviceOrder:list', 'service-order', 'admin', sysdate(), '', null, '服务单管理菜单');
--新增订单详情
insert into sys_menu values('2001', '服务单管理', '1', '10', 'serviceOrder', 'system/order/detail', '', 'serviceOrder', 1, 0, 'C', '0', '0', 'system:serviceOrder:detail', 'service-order', 'admin', sysdate(), '', null, '订单详情');
-- ç”¨æˆ·ç®¡ç†æŒ‰é’®
insert into sys_menu values('1000', '用户查询', '100', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query',          '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1001', '用户新增', '100', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add',            '#', 'admin', sysdate(), '', null, '');