Explorar o código

Merge remote-tracking branch 'origin/master'

jzp hai 2 meses
pai
achega
ff98448b4f
Modificáronse 100 ficheiros con 8487 adicións e 144 borrados
  1. 4 4
      .env.prod-bjyjb
  2. 2 2
      .env.prod-kyt
  3. 40 0
      .env.prod-syysy
  4. 41 0
      .env.prod-ylrz
  5. 39 0
      .env.prod-zkzh
  6. 3 0
      package.json
  7. 8 0
      src/api/course/userCoursePeriod.js
  8. 17 1
      src/api/his/storeOrder.js
  9. 59 0
      src/api/hisStore/chineseMedicine.js
  10. 69 0
      src/api/hisStore/city.js
  11. 63 0
      src/api/hisStore/components/IllnessLibraryDetails.vue
  12. 109 0
      src/api/hisStore/components/addBatchPublish.vue
  13. 72 0
      src/api/hisStore/components/addUser.vue
  14. 155 0
      src/api/hisStore/components/addUserAddress.vue
  15. 84 0
      src/api/hisStore/components/chineseMedicineDetails.vue
  16. 119 0
      src/api/hisStore/components/departmentDetails.vue
  17. 103 0
      src/api/hisStore/components/diseaseDetails.vue
  18. 119 0
      src/api/hisStore/components/doctorArticleDetails.vue
  19. 90 0
      src/api/hisStore/components/famousPrescribeDetails.vue
  20. 89 0
      src/api/hisStore/components/integralGoodsDetails.vue
  21. 312 0
      src/api/hisStore/components/integralOrderDetails.vue
  22. 80 0
      src/api/hisStore/components/medicatedFoodDetails.vue
  23. 369 0
      src/api/hisStore/components/offlineOrder.vue
  24. 398 0
      src/api/hisStore/components/productAfterSalesOrder.vue
  25. 114 0
      src/api/hisStore/components/productAttrValueSelect.vue
  26. 860 0
      src/api/hisStore/components/productOrder.vue
  27. 102 0
      src/api/hisStore/components/productSelect.vue
  28. 111 0
      src/api/hisStore/components/testReportDetails.vue
  29. 108 0
      src/api/hisStore/components/testTempDetails.vue
  30. 116 0
      src/api/hisStore/components/testTempItemDetails.vue
  31. 80 0
      src/api/hisStore/components/vesselDetails.vue
  32. 53 0
      src/api/hisStore/department.js
  33. 60 0
      src/api/hisStore/disease.js
  34. 62 0
      src/api/hisStore/doctorArticle.js
  35. 59 0
      src/api/hisStore/famousPrescribe.js
  36. 60 0
      src/api/hisStore/illnessLibrary.js
  37. 58 0
      src/api/hisStore/integralGoods.js
  38. 80 0
      src/api/hisStore/integralOrder.js
  39. 60 0
      src/api/hisStore/medicatedFood.js
  40. 53 0
      src/api/hisStore/menu.js
  41. 53 0
      src/api/hisStore/prescribe.js
  42. 53 0
      src/api/hisStore/prescribeDrug.js
  43. 59 0
      src/api/hisStore/shippingTemplates.js
  44. 53 0
      src/api/hisStore/storeActivity.js
  45. 87 0
      src/api/hisStore/storeAfterSales.js
  46. 53 0
      src/api/hisStore/storeAfterSalesItem.js
  47. 53 0
      src/api/hisStore/storeAfterSalesStatus.js
  48. 21 0
      src/api/hisStore/storeCanvas.js
  49. 53 0
      src/api/hisStore/storeCart.js
  50. 70 0
      src/api/hisStore/storeCoupon.js
  51. 53 0
      src/api/hisStore/storeCouponIssue.js
  52. 53 0
      src/api/hisStore/storeCouponIssueUser.js
  53. 53 0
      src/api/hisStore/storeCouponUser.js
  54. 287 0
      src/api/hisStore/storeOrder.js
  55. 19 0
      src/api/hisStore/storeOrderAudit.js
  56. 53 0
      src/api/hisStore/storeOrderItem.js
  57. 53 0
      src/api/hisStore/storeOrderNotice.js
  58. 69 0
      src/api/hisStore/storeOrderOffline.js
  59. 53 0
      src/api/hisStore/storeOrderStatus.js
  60. 78 0
      src/api/hisStore/storePayment.js
  61. 96 0
      src/api/hisStore/storeProduct.js
  62. 53 0
      src/api/hisStore/storeProductAttr.js
  63. 53 0
      src/api/hisStore/storeProductAttrValue.js
  64. 59 0
      src/api/hisStore/storeProductCategory.js
  65. 53 0
      src/api/hisStore/storeProductDetails.js
  66. 53 0
      src/api/hisStore/storeProductGroup.js
  67. 71 0
      src/api/hisStore/storeProductPackage.js
  68. 53 0
      src/api/hisStore/storeProductRelation.js
  69. 62 0
      src/api/hisStore/storeProductReply.js
  70. 61 0
      src/api/hisStore/storeProductRule.js
  71. 53 0
      src/api/hisStore/storeProductTemplate.js
  72. 53 0
      src/api/hisStore/storeProductYuyue.js
  73. 53 0
      src/api/hisStore/storeShop.js
  74. 53 0
      src/api/hisStore/storeShopStaff.js
  75. 53 0
      src/api/hisStore/storeVisit.js
  76. 53 0
      src/api/hisStore/testReport.js
  77. 65 0
      src/api/hisStore/testTemp.js
  78. 53 0
      src/api/hisStore/testTempItem.js
  79. 117 0
      src/api/hisStore/user.js
  80. 61 0
      src/api/hisStore/userAddress.js
  81. 65 0
      src/api/hisStore/vessel.js
  82. BIN=BIN
      src/assets/logo/kyt.jpg
  83. BIN=BIN
      src/assets/logo/syysy.png
  84. BIN=BIN
      src/assets/logo/zkzh_logo.png
  85. 241 0
      src/components/SmartEndpointToggle/ScrmEndpointButton.vue
  86. 7 0
      src/permission.js
  87. 11 3
      src/utils/request.js
  88. 143 0
      src/utils/requestHisStore.js
  89. 41 39
      src/views/components/course/userCourseCatalogDetails.vue
  90. 130 33
      src/views/components/his/storeOrderDetails.vue
  91. 11 3
      src/views/components/his/storeOrderDetails2.vue
  92. 4 4
      src/views/course/userCourse/public.vue
  93. 117 26
      src/views/course/userCoursePeriod/redPacket.vue
  94. 4 4
      src/views/course/userVideo/index.vue
  95. 47 0
      src/views/his/company/index.vue
  96. 95 24
      src/views/his/storeOrder/order1.vue
  97. 1 1
      src/views/his/user/indexProject.vue
  98. 364 0
      src/views/hisStore/companyUser/index.vue
  99. 63 0
      src/views/hisStore/components/IllnessLibraryDetails.vue
  100. 109 0
      src/views/hisStore/components/addBatchPublish.vue

+ 4 - 4
.env.prod-bjyjb

@@ -5,9 +5,9 @@ VUE_APP_TITLE_INDEX =医健宝互联网医院
 # 公司名称
 VUE_APP_COMPANY_NAME =医健宝智慧(北京)医药科技有限公司
 # ICP备案号
-VUE_APP_ICP_RECORD =
+VUE_APP_ICP_RECORD =京ICP备2025133930号-2
 # ICP网站访问地址
-VUE_APP_ICP_URL =
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
 # 网站LOG
 VUE_APP_LOG_URL =@/assets/logo/bjyjb.jpg
 # 存储桶配置
@@ -23,9 +23,9 @@ VUE_APP_COS_BUCKET = bjyjb-1323137866
 # 存储桶配置
 VUE_APP_COS_REGION = ap-chongqing
 # 线路一地址
-VUE_APP_VIDEO_LINE_1 = https://cqxzttcpv.ylrzcloud.com
+VUE_APP_VIDEO_LINE_1 = https://bjyjbtcpv.ylrzcloud.com
 # 线路二地址
-VUE_APP_VIDEO_LINE_2 = https://cqxztobs.ylrztop.com
+VUE_APP_VIDEO_LINE_2 = https://bjyjbobs.ylrztop.com
 
 # 开发环境配置
 ENV = 'production'

+ 2 - 2
.env.prod-kyt

@@ -1,7 +1,7 @@
 # 页面标题
 VUE_APP_TITLE =互联网医院管理系统
 # 首页菜单标题
-VUE_APP_TITLE_INDEX =互联网医院管理系统
+VUE_APP_TITLE_INDEX =宽益堂管理系统
 # 公司名称
 VUE_APP_COMPANY_NAME =重庆云联融智科技有限公司
 # ICP备案号
@@ -9,7 +9,7 @@ VUE_APP_ICP_RECORD =渝ICP备2024031984号-1
 # ICP网站访问地址
 VUE_APP_ICP_URL =https://beian.miit.gov.cn
 # 网站LOG
-VUE_APP_LOG_URL =@/assets/logo/ylrz.png
+VUE_APP_LOG_URL =@/assets/logo/kyt.jpg
 # 存储桶配置
 VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
 # 存储桶配置

+ 40 - 0
.env.prod-syysy

@@ -0,0 +1,40 @@
+# 页面标题
+VUE_APP_TITLE =互联网医院管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =益寿缘
+# 公司名称
+VUE_APP_COMPANY_NAME =沈阳铁西益寿缘中医院有限责任公司
+# ICP备案号
+VUE_APP_ICP_RECORD =辽ICP备2024035076号-17
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/syysy.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = syysy-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = syysy -1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://syysytcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://syysyobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'development'
+
+# 今正互联网医院管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 41 - 0
.env.prod-ylrz

@@ -0,0 +1,41 @@
+#该文本用于打包测试平台
+# 页面标题
+VUE_APP_TITLE =云联融智互联网医院管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =云联融智互联网医院
+# 公司名称
+VUE_APP_COMPANY_NAME =云联融智科技有些公司
+# ICP备案号
+VUE_APP_ICP_RECORD =
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/ylrz.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = jkj-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = jkj-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://jkjtcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://jkjobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 39 - 0
.env.prod-zkzh

@@ -0,0 +1,39 @@
+# 页面标题
+VUE_APP_TITLE = 中康SCRM管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX = 陕西中康智慧
+# 公司名称
+VUE_APP_COMPANY_NAME = 陕西中康智慧药房有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD = 陕ICP备2024048690号-2
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/zkzh_logo.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = zkzh-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = zkzh-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://zkzhtcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://zkzhobs.ylrztop.com
+# 生产环境配置
+ENV = 'production'
+
+#FS管理系统/生产环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
package.json

@@ -7,6 +7,7 @@
   "scripts": {
     "dev": "vue-cli-service serve",
     "build:prod": "vue-cli-service build",
+    "build:prod-ylrz": "vue-cli-service build --mode prod-ylrz",
     "build:prod-test": "vue-cli-service build --mode prod-test",
     "build:prod-hzyy": "vue-cli-service build --mode prod-hzyy",
     "build:prod-jzzx": "vue-cli-service build --mode prod-jzzx",
@@ -32,6 +33,8 @@
     "build:prod-bjyjb": "vue-cli-service build --mode prod-bjyjb",
     "build:prod-bjczwh": "vue-cli-service build --mode prod-bjczwh",
     "build:prod-fby": "vue-cli-service build --mode prod-fby",
+    "build:prod-zkzh": "vue-cli-service build --mode prod-zkzh",
+    "build:prod-syysy": "vue-cli-service build --mode prod-syysy",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src"
   },

+ 8 - 0
src/api/course/userCoursePeriod.js

@@ -199,3 +199,11 @@ export function periodList(data) {
     data: data
   })
 }
+// 根据公司批量设置红包金额
+export function batchSaveRedPacketByCompany(data) {
+  return request({
+    url: '/course/period/batchRedPacket/byCompany',
+    method: 'post',
+    data: data
+  })
+}

+ 17 - 1
src/api/his/storeOrder.js

@@ -15,6 +15,13 @@ export function importTemplate() {
     method: 'get'
   })
 }
+// 下载导入模板
+export function importUpdateOrderTemplate() {
+  return request({
+    url: '/his/storeOrder/importUpdateOrderTemplate',
+    method: 'get'
+  })
+}
 // 查询订单详细
 export function getOrder(orderId) {
   return request({
@@ -149,6 +156,15 @@ export function updateOrder(data) {
     data: data
   })
 }
+// 修改订单
+export function updateStoreOrder(data) {
+  return request({
+    url: '/his/storeOrder',
+    method: 'put',
+    data: data
+  })
+}
+
 export function updateDelivery(data) {
   return request({
     url: '/his/storeOrder/updateDelivery',
@@ -280,4 +296,4 @@ export function getErpAccount() {
     url: '/his/storeOrder/getErpAccount',
     method: 'get'
   })
-}
+}

+ 59 - 0
src/api/hisStore/chineseMedicine.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 查询中药科普管理列表
+export function listChineseMedicine(query) {
+  return request({
+    url: '/his/chineseMedicine/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询中药科普管理详细
+export function getChineseMedicine(id) {
+  return request({
+    url: '/his/chineseMedicine/' + id,
+    method: 'get'
+  })
+}
+// 下载导入模板
+export function importTemplate() {
+  return request({
+    url: '/his/chineseMedicine/importTemplate',
+    method: 'get'
+  })
+}
+// 新增中药科普管理
+export function addChineseMedicine(data) {
+  return request({
+    url: '/his/chineseMedicine',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改中药科普管理
+export function updateChineseMedicine(data) {
+  return request({
+    url: '/his/chineseMedicine',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除中药科普管理
+export function delChineseMedicine(id) {
+  return request({
+    url: '/his/chineseMedicine/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出中药科普管理
+export function exportChineseMedicine(query) {
+  return request({
+    url: '/his/chineseMedicine/export',
+    method: 'get',
+    params: query
+  })
+}

+ 69 - 0
src/api/hisStore/city.js

@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// 查询城市列表
+export function listCity(query) {
+  return request({
+    url: '/store/city/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllList(query) {
+  return request({
+    url: '/store/city/getAllList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCitys() {
+  return request({
+    url: '/store/city/getCitys',
+    method: 'get'
+  })
+}
+
+
+
+// 查询城市详细
+export function getCity(id) {
+  return request({
+    url: '/store/city/' + id,
+    method: 'get'
+  })
+}
+
+// 新增城市
+export function addCity(data) {
+  return request({
+    url: '/store/city',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改城市
+export function updateCity(data) {
+  return request({
+    url: '/store/city',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除城市
+export function delCity(id) {
+  return request({
+    url: '/store/city/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出城市
+export function exportCity(query) {
+  return request({
+    url: '/store/city/export',
+    method: 'get',
+    params: query
+  })
+}

+ 63 - 0
src/api/hisStore/components/IllnessLibraryDetails.vue

@@ -0,0 +1,63 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         中医疾病详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 中医疾病信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="疾病名称"><span v-if="item!=null">{{item.illnessName}}</span></el-descriptions-item>
+          <el-descriptions-item label="舌脉"><span v-if="item!=null">{{item.tongueVein}}</span></el-descriptions-item>
+          <el-descriptions-item label="治法"><span v-if="item!=null">{{item.therapy}}</span></el-descriptions-item>
+           <el-descriptions-item label="症状"><span v-if="item!=null">{{item.symptom}}</span></el-descriptions-item>
+          <el-descriptions-item label="方剂名称"><span v-if="item!=null">{{item.formulaName}}</span></el-descriptions-item>
+          <el-descriptions-item label="方剂详情"><span v-if="item!=null">{{item.formulaDescs}}</span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+    </div>
+</template>
+
+<script>
+import { listillnessLibrary, getillnessLibrary, delillnessLibrary, addillnessLibrary, updateillnessLibrary, exportillnessLibrary } from "@/api/store/illnessLibrary";
+  export default {
+    name: "IllnessLibrary",
+    props:["data"],
+    data() {
+      return {
+        item:null,
+      }
+    },
+    created() {
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getillnessLibrary(orderId).then(response => {
+            this.item = response.data;
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 109 - 0
src/api/hisStore/components/addBatchPublish.vue

@@ -0,0 +1,109 @@
+<template>
+    <div>
+            <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+                <el-form-item label="优惠券数量" >
+                    {{ids.length}}个
+                </el-form-item>
+                <el-form-item label="优惠券开始时间" prop="startTime">
+                <el-date-picker clearable size="small" style="width: 200px"
+                    v-model="form.startTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择开始时间">
+                </el-date-picker>
+                </el-form-item>
+                <el-form-item label="优惠券结束时间" prop="limitTime">
+                <el-date-picker clearable size="small" style="width: 200px"
+                    v-model="form.limitTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择结束时间">
+                </el-date-picker>
+                </el-form-item>
+                <el-form-item label="优惠券领取数量" prop="totalCount">
+                <el-input-number v-model="form.totalCount" :min="0" placeholder="请输入优惠券领取数量" />
+                </el-form-item>
+            </el-form>
+             <div   class="footer">
+            <el-button type="primary" @click="submitForm">确 定</el-button>
+            <el-button @click="cancel">取 消</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { batchPublishCoupon  } from "@/api/store/storeCoupon";
+export default {
+        name: "batchPublish",
+        data() {
+            return {
+                statusOptions:[],
+                ids:[],
+                // 表单参数
+                form: {},
+                // 表单校验
+                rules: {
+                    totalCount: [
+                    { required: true, message: "数量不能为空", trigger: "blur" }
+                    ],
+                    startTime: [
+                    { required: true, message: "开始时间不能为空", trigger: "blur" }
+                    ],
+                    limitTime: [
+                    { required: true, message: "结束时间不能为空", trigger: "blur" }
+                    ],
+                }
+            };
+        },
+        created() {
+
+        },
+        methods: {
+            cancel(){
+                this.$emit('close');
+            },
+            handleBatch(ids) {
+                console.log(ids)
+                this.ids=ids;
+
+            },
+            /** 提交按钮 */
+            submitForm() {
+                this.$refs["form"].validate(valid => {
+                    if (valid) {
+                        this.myloading = this.$loading({
+                            lock: true,
+                            text: '处理中...',
+                            spinner: 'el-icon-loading',
+                            background: 'rgba(0, 0, 0, 0.7)'
+                        });
+                        this.form.ids=this.ids.toString();
+                        batchPublishCoupon(this.form).then(response => {
+                            this.myloading.close()
+                            if (response.code === 200) {
+                                this.msgSuccess("发布成功");
+                                this.$emit('close');
+                            }
+                        });
+                    }
+                });
+            },
+        }
+    };
+</script>
+<style lang="scss" scoped>
+.contents{
+    height: 100%;
+    background-color: #fff;
+    padding: 20px;
+
+}
+.footer{
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+}
+</style>
+
+
+

+ 72 - 0
src/api/hisStore/components/addUser.vue

@@ -0,0 +1,72 @@
+<template>
+  <div >
+       <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="会员昵称" prop="nickname">
+          <el-input v-model="form.nickname" placeholder="请输入用户昵称" />
+        </el-form-item>
+        <el-form-item label="手机号码" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入手机号码" />
+        </el-form-item>
+        <el-form-item label="状态">
+            <el-radio-group v-model="form.status">
+              <el-radio :label="item.dictValue" v-for="item in statusOptions" >{{item.dictLabel}}</el-radio>
+            </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div    style="text-align:right;">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+  </div>
+</template>
+
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, exportUser } from "@/api/store/user";
+
+export default {
+  name: "add",
+  data() {
+    return {
+      statusOptions:[],
+      // 表单参数
+      form: {
+        status:"1"
+      },
+      // 表单校验
+      rules: {
+        phone: [
+          { required: true, message: "手机号不能为空", trigger: "blur" }
+        ],
+        nickname: [
+          { required: true, message: "会员昵称不能为空", trigger: "blur" }
+        ],
+         
+      }
+    };
+  },
+  created() {
+    this.getDicts("user_status").then((response) => {
+      this.statusOptions = response.data;
+    });
+  },
+
+  methods: {
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          addUser(this.form).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("新增成功");
+              this.$emit("addUser")
+              
+            }
+          });
+        }
+      });
+    },
+     
+  }
+};
+</script>
+<style scoped>
+ 
+</style>

+ 155 - 0
src/api/hisStore/components/addUserAddress.vue

@@ -0,0 +1,155 @@
+<template>
+  <div >
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="收货人姓名" prop="realName">
+          <el-input v-model="form.realName" placeholder="请输入收货人姓名" />
+        </el-form-item>
+        <el-form-item label="收货人电话" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入收货人电话" />
+        </el-form-item>
+        <el-form-item label="收货地址" prop="district">
+          <el-row :gutter="20">
+          <el-col :span="6">
+             <el-select @change="provinceChange" v-model="form.province" placeholder="请选择">
+                <el-option
+                  v-for="item in province"
+                  :key="item.cityId"
+                  :label="item.name"
+                  :value="item.cityId">
+                </el-option>
+              </el-select>
+          </el-col>
+          <el-col :span="6">
+            <el-select @change="cityChange" v-model="form.city" placeholder="请选择">
+                <el-option
+                  v-for="item in city"
+                  :key="item.cityId"
+                  :label="item.name"
+                  :value="item.cityId">
+                </el-option>
+              </el-select>
+          </el-col>
+          <el-col :span="6">
+             <el-select @change="districtChange" v-model="form.district" placeholder="请选择">
+                <el-option
+                  v-for="item in district"
+                  :key="item.cityId"
+                  :label="item.name"
+                  :value="item.cityId">
+                </el-option>
+              </el-select>
+          </el-col>
+        </el-row>
+        </el-form-item>
+        <el-form-item label="详细地址" prop="detail">
+          <el-input v-model="form.detail" placeholder="请输入收货人详细地址" />
+        </el-form-item>
+      </el-form>
+      <div  style="text-align:right;">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+  </div>
+</template>
+
+<script>
+import { listUserAddress, getUserAddress, delUserAddress, addUserAddress, updateUserAddress, exportUserAddress } from "@/api/store/userAddress";
+import {getAllList} from "@/api/store/city";
+export default {
+  name: "add",
+  data() {
+    return {
+      citys:[],
+      province:[],
+      city:[],
+      district:[],
+      // 表单参数
+      form: {
+        province:null,
+        city:null,
+        district:null,
+        cityId:null,
+      },
+      // 表单校验
+      rules: {
+        userId: [
+          { required: true, message: "会员不能为空", trigger: "blur" }
+        ], 
+        realName: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
+        ],
+        phone: [
+          { required: true, message: "电话不能为空", trigger: "blur" }
+        ],
+        detail: [
+          { required: true, message: "详细地址不能为空", trigger: "blur" }
+        ],
+        district: [
+          { required: true, message: "收货地址不能为空", trigger: "blur" }
+        ],
+        
+      }
+    };
+  },
+  created(){
+    this.getCityList();
+  },
+  methods: {
+    districtChange(val){
+      var item=this.citys.find((item)=>{
+        return item.cityId==val;
+      })
+      console.log(item)
+      this.form.district=item.name;
+
+    },
+    cityChange(val){
+      this.district=this.citys.filter(item => item.parentId===val )
+      this.form.district=null;
+      var item=this.citys.find((item)=>{
+        return item.cityId==val;
+      })
+      console.log(item)
+      this.form.city=item.name;
+      this.form.cityId=val;
+        
+    },
+    provinceChange(val){
+      console.log(val)
+      this.city=this.citys.filter(item => item.parentId===val )
+      this.district=[];
+      this.form.city=null;
+      this.form.district=null;
+      var item=this.citys.find((item)=>{
+        return item.cityId==val;
+      })
+      console.log(item)
+      this.form.province=item.name;
+    },
+    getCityList(){
+        getAllList().then(res => {
+          this.loading = false;
+          this.citys=res.data;
+          this.province=res.data.filter(item => item.level===0 )
+        })
+    },
+    init(userId){
+      this.form.userId=userId;
+    },
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          addUserAddress(this.form).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("新增成功");
+              this.$emit("addUserAddress")
+            }
+          });
+        }
+      });
+    },
+  }
+};
+</script>
+<style scoped>
+ 
+</style>

+ 84 - 0
src/api/hisStore/components/chineseMedicineDetails.vue

@@ -0,0 +1,84 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         中医科普详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 中医科普信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="图片" >
+            <el-image
+                    style="width: 100px"
+                    :src="item.imgUrl"
+                    :preview-src-list="[item.imgUrl]">
+            </el-image>
+          </el-descriptions-item>
+          <el-descriptions-item label="中药名称"><span v-if="item!=null">{{item.medicineName}}</span></el-descriptions-item>
+          <el-descriptions-item label="排序"><span v-if="item!=null">{{item.sort}}</span></el-descriptions-item>
+          <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+          <el-descriptions-item label="是否常见"><span v-if="item!=null"><dict-tag :options="isUsualOptions" :value="item.isUsual"/></span></el-descriptions-item>
+          <el-descriptions-item label="归经"><span v-if="item!=null">{{item.vessel}}</span></el-descriptions-item>
+          <el-descriptions-item label="五味"span="3"><span v-if="item!=null">{{item.flavor}}</span></el-descriptions-item>
+          <el-descriptions-item label="药物作用"span="3"><span v-if="item!=null"><span v-html="item.action"></span></span></el-descriptions-item>
+          <el-descriptions-item label="用药方法" span="3"><span v-if="item!=null"> <span v-html="item.usageMethod"></span></span></el-descriptions-item>
+          <el-descriptions-item label="基本信息" span="3"><span v-if="item!=null"> <span v-html="item.descs"></span></span></el-descriptions-item>
+          <el-descriptions-item label="注意事项" span="3"><span v-if="item!=null"> <span v-html="item.msg"></span></span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+
+
+    </div>
+</template>
+
+<script>
+import { listChineseMedicine, getChineseMedicine, delChineseMedicine, addChineseMedicine, updateChineseMedicine, exportChineseMedicine } from "@/api/store/chineseMedicine";
+  export default {
+    name: "coupon",
+    data() {
+      return {
+        item:null,
+      }
+    },
+    created() {
+      this.getDicts("sys_company_or").then(response => {
+        this.isUsualOptions = response.data;
+      });
+      this.getDicts("sys_company_status").then(response => {
+        this.statusOptions = response.data;
+      });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getChineseMedicine(orderId).then(response => {
+            this.item = response.data;
+        
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 119 - 0
src/api/hisStore/components/departmentDetails.vue

@@ -0,0 +1,119 @@
+<template>
+<div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+    <div style="padding: 20px; background-color: #fff;">
+      科室详情
+    </div>
+<div class="contentx" v-if="item!=null">
+      <div class="desct">
+        科室信息
+      </div>
+
+        <el-descriptions title="" :column="3" border>
+            <el-descriptions-item label="科室名称" >
+                <span v-if="item!=null">{{item.deptName}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="科室编码" >
+                <span v-if="item!=null">{{item.deptCode}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="图标" >
+              <el-popover
+                placement="right"
+                title=""
+                trigger="hover">
+                <img slot="reference" :src="item.iconUrl" width="50px">
+                <img :src="item.iconUrl" style="max-width: 150px;">
+              </el-popover>
+
+            </el-descriptions-item>
+            <el-descriptions-item label="排序" >
+                <span v-if="item!=null">{{item.sort}}</span>
+            </el-descriptions-item>
+
+            <el-descriptions-item label="状态" >
+             <span v-if="item!=null">
+                   <dict-tag :options="statusOptions" :value="item.status"/>
+             </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="是否推荐" >
+             <span v-if="item!=null">
+                   <dict-tag :options="isTuiOptions" :value="item.isTui"/>
+             </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="创建时间" >
+                <span v-if="item!=null">{{item.createTime}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="创建者" >
+                <span v-if="item!=null">{{item.createBy}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="更新时间" >
+                <span v-if="item!=null">{{item.updateTime}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="更新者" >
+                <span v-if="item!=null">{{item.updateBy}}</span>
+            </el-descriptions-item>
+
+
+
+        </el-descriptions>
+    </div>
+    </div>
+</template>
+
+<script>
+  import { listDepartment, getDepartment, delDepartment, addDepartment, updateDepartment, exportDepartment } from "@/api/store/department";
+  export default {
+    name: "depdetails",
+    props:["data"],
+    data() {
+      return {
+        statusOptions: [],
+        isTuiOptions: [],
+        item:null,
+        form: {
+          sreason: '',
+        }
+      }
+    },
+    created() {
+      this.getDicts("sys_company_status").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getDicts("sys_company_or").then(response => {
+          this.isTuiOptions = response.data;
+        });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getDepartment(orderId).then(response => {
+              this.item = response.data;
+        });
+      },
+    }
+  }
+</script>
+<style>
+
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 103 - 0
src/api/hisStore/components/diseaseDetails.vue

@@ -0,0 +1,103 @@
+<template>
+  <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+    <div style="padding: 20px; background-color: #fff;">
+      疾病详情
+    </div>
+<div class="contentx" v-if="item!=null">
+      <div class="desct">
+        疾病信息
+      </div>
+        <el-descriptions title="" :column="3" border>
+            <el-descriptions-item label="疾病id"  >
+                <span v-if="item!=null">{{item.diseaseId}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="疾病名称" >
+                <span v-if="item!=null">{{item.diseaseName}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="疾病编号" >
+                <span v-if="item!=null">{{item.diseaseCode}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="所属科室" >
+                <span v-if="item!=null">{{item.deptName}}</span>
+            </el-descriptions-item>
+
+
+            <el-descriptions-item label="状态" >
+             <span v-if="item!=null">
+                   <dict-tag :options="statusOptions" :value="item.status"/>
+             </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="创建时间" >
+                <span v-if="item!=null">{{item.createTime}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="简介" span="6">
+                <span v-if="item!=null">{{item.introduction}}</span>
+            </el-descriptions-item>
+
+            <el-descriptions-item label="诊断" span="6">
+                <span v-if="item!=null">{{item.diagnose}}</span>
+            </el-descriptions-item>
+            <el-descriptions-item label="症状" span="6">
+                      <span v-html="item.symptom"></span>
+
+            </el-descriptions-item>
+            <el-descriptions-item label="检验" span="6">
+                      <span v-html="item.inspect"></span>
+            </el-descriptions-item>
+        </el-descriptions>
+    </div>
+    </div>
+</template>
+
+<script>
+  import {getDisease} from '@/api/store/disease';
+  export default {
+    name: "desdetails",
+    props:["data"],
+    data() {
+      return {
+        statusOptions: [],
+        item:null,
+        form: {
+          sreason: '',
+        }
+      }
+    },
+    created() {
+      this.getDicts("sys_company_status").then(response => {
+        this.statusOptions = response.data;
+      });
+
+    },
+    methods: {
+      getDetails(orderId) {
+          this.item=null;
+          getDisease(orderId).then(response => {
+              this.item = response.data;
+          });
+      },
+    }
+  }
+</script>
+<style>
+
+ .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+</style>

+ 119 - 0
src/api/hisStore/components/doctorArticleDetails.vue

@@ -0,0 +1,119 @@
+<template>
+  <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+    <div style="padding: 20px; background-color: #fff;">
+      文章详情
+    </div>
+    <div class="content" >
+      <div class="desct">
+        文章信息
+      </div>
+      <el-descriptions title="" :column="3" border>
+        <el-descriptions-item label="文章ID"  >
+            <span v-if="item!=null">{{item.articleId}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="封面图" >
+          <el-popover v-if="item!=null"
+            placement="right"
+            title=""
+            trigger="hover">
+            <img slot="reference" :src="item.imageUrl" width="50px">
+            <img :src="item.imageUrl" style="max-width: 150px;">
+          </el-popover>
+        </el-descriptions-item>
+        <el-descriptions-item label="分类" >
+            <dict-tag v-if="item!=null" :options="cateStatus" :value="item.cateId"/>
+        </el-descriptions-item>
+        <el-descriptions-item label="标题" >
+            <span v-if="item!=null">{{item.title}}</span>
+        </el-descriptions-item>
+
+        <el-descriptions-item label="浏览量" >
+            <span v-if="item!=null">{{item.views}}</span>
+        </el-descriptions-item>
+
+        <el-descriptions-item label="状态" >
+        <span v-if="item!=null">
+              <dict-tag :options="articleStatus" :value="item.status"/>
+        </span>
+        </el-descriptions-item>
+        <el-descriptions-item label="创建时间" >
+            <span v-if="item!=null">{{item.createTime}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="更新时间" >
+            <span v-if="item!=null">{{item.updateTime}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="内容" >
+            <span v-if="item!=null" v-html="item.content"></span>
+        </el-descriptions-item>
+      </el-descriptions>
+    </div>
+    <div class="content" v-if="item!=null">
+      <div class="desct">
+        视频内容
+      </div>
+      <div style="display: flex; justify-content: center; align-items: center;">
+          <div style="display: grid; place-items: center;">
+             <video  :src="item.videoUrl" controls style="max-width: 400px; max-height: 400px;"></video>
+          </div>
+      </div>                         
+    </div>
+  </div>
+</template>
+
+<script>
+  import {getArticle} from "@/api/store/doctorArticle";
+  export default {
+    name: "articledetails",
+    props:["data"],
+    data() {
+      return {
+        cateStatus: [],
+        articleStatus: [],
+        statusOptions: [],
+        item:null,
+      }
+    },
+    created() {
+      this.getDicts("sys_doctor_article_cate").then(response => {
+        this.cateStatus = response.data;
+      });
+      this.getDicts("sys_doctor_article_status").then(response => {
+        this.articleStatus = response.data;
+      });
+      this.getDicts("sys_company_status").then(response => {
+        this.statusOptions = response.data;
+      });
+    },
+    methods: {
+      getDetails(orderId) {
+          this.item=null;
+          getArticle(orderId).then(response => {
+              this.item = response.data;
+          });
+      },
+    }
+  }
+</script>
+<style>
+
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .content{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+</style>

+ 90 - 0
src/api/hisStore/components/famousPrescribeDetails.vue

@@ -0,0 +1,90 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         经典名方详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 经典名方信息</div>
+        <el-descriptions title="" :column="3" border>
+          <<el-descriptions-item label="图片" >
+              <el-image
+                      style="width: 100px"
+                      :src="item.imgUrl"
+                      :preview-src-list="[item.imgUrl]">
+              </el-image>
+            </el-descriptions-item>
+          <el-descriptions-item label="经典名方名称"><span v-if="item!=null">{{item.prescribeName}}</span></el-descriptions-item>
+          <el-descriptions-item label="排序"><span v-if="item!=null">{{item.sort}}</span></el-descriptions-item>
+          <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+          <el-descriptions-item label="方剂类型"><span v-if="item!=null"> <dict-tag :options="prescribeTypeOptions" :value="item.prescribeType"/></span></el-descriptions-item>
+           <el-descriptions-item label="主治疾病"><span v-if="item!=null">{{item.indication}}</span></el-descriptions-item>
+          <el-descriptions-item label="归属书籍" span="3"><span v-if="item!=null">{{item.belongBook}}</span></el-descriptions-item>
+          <el-descriptions-item label="药物作用"span="3"><span v-if="item!=null"><span v-html="item.action"></span></span></el-descriptions-item>
+          <el-descriptions-item label="用药方法" span="3"><span v-if="item!=null"> <span v-html="item.usageMethod"></span></span></el-descriptions-item>
+          <el-descriptions-item label="基本信息" span="3"><span v-if="item!=null"> <span v-html="item.descs"></span></span></el-descriptions-item>
+          <el-descriptions-item label="注意事项" span="3"><span v-if="item!=null"> <span v-html="item.msg"></span></span></el-descriptions-item>
+          <el-descriptions-item label="创建时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+
+        </el-descriptions>
+    </div>
+
+
+    </div>
+</template>
+
+<script>
+import { listFamousPrescribe, getFamousPrescribe, delFamousPrescribe, addFamousPrescribe, updateFamousPrescribe, exportFamousPrescribe } from "@/api/store/famousPrescribe";
+  export default {
+    name: "prescribeName",
+    data() {
+      return {
+        // 方剂类型字典
+        prescribeTypeOptions: [],
+        // 状态字典
+        statusOptions: [],
+        item:null,
+      }
+    },
+    created() {
+        this.getDicts("sys_famous_prescribe_type").then(response => {
+          this.prescribeTypeOptions = response.data;
+        });
+        this.getDicts("sys_company_status").then(response => {
+          this.statusOptions = response.data;
+        });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getFamousPrescribe(orderId).then(response => {
+            this.item = response.data;
+
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 89 - 0
src/api/hisStore/components/integralGoodsDetails.vue

@@ -0,0 +1,89 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         积分商品详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 积分商品信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="商品名称"><span v-if="item!=null">{{item.goodsName}}</span></el-descriptions-item>
+          <el-descriptions-item label="封面图"> <el-image v-if="item.imgUrl!=null"
+                  style="width: 100px"
+                  :src="item.imgUrl"
+                  :preview-src-list="[item.imgUrl]">
+              </el-image></el-descriptions-item>
+          <el-descriptions-item label="商品分类"> <dict-tag :options="goodsTypeOptions" :value="item.goodsType"/></el-descriptions-item>
+          <el-descriptions-item label="原价"><span v-if="item!=null">{{item.otPrice}}</span></el-descriptions-item>
+
+
+          <el-descriptions-item label="所需积分"><span v-if="item!=null">{{item.integral}}</span></el-descriptions-item>
+          <el-descriptions-item label="排序"><span v-if="item!=null">{{item.sort}}</span></el-descriptions-item>
+          <el-descriptions-item label="库存"><span v-if="item!=null">{{item.stock}}</span></el-descriptions-item>
+          <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+          <el-descriptions-item label="创建时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+    <div class="contentx" v-if="item!=null">
+        <div class="desct"> 积分商品信息</div>
+    <span v-html="item.descs"></span>
+    </div>
+
+    </div>
+</template>
+
+<script>
+import { listIntegralGoods, getIntegralGoods, delIntegralGoods, addIntegralGoods, updateIntegralGoods, exportIntegralGoods } from "@/api/store/integralGoods";
+  export default {
+    name: "coupon",
+    data() {
+      return {
+        // 商品分类字典
+        goodsTypeOptions: [],
+        // 状态字典
+        statusOptions: [],
+        item:null,
+      }
+    },
+    created() {
+        this.getDicts("sys_integral_goods_type").then(response => {
+          this.goodsTypeOptions = response.data;
+        });
+        this.getDicts("sys_company_status").then(response => {
+          this.statusOptions = response.data;
+        });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getIntegralGoods(orderId).then(response => {
+            this.item = response.data;
+
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 312 - 0
src/api/hisStore/components/integralOrderDetails.vue

@@ -0,0 +1,312 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         积分订单详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 积分订单信息</div>
+        <div class="order-status" v-if="item!=null" >
+                  <el-steps  :active="item.status==3?item.status:item.status-1" align-center finish-status="success">
+                    <el-step title="待发货"></el-step>
+                    <el-step title="待收货"></el-step>
+                    <el-step title="已完成"></el-step>
+                  </el-steps>
+        </div>
+         <el-card shadow="never" style="margin-top: 15px">
+           <div class="operate-container"  v-if="item!=null">
+             <span style="margin-left: 20px" class="color-danger">订单状态:
+                <el-tag prop="status" v-for="(ite, index) in statusOptions"    v-if="item.status==ite.dictValue">{{ite.dictLabel}}</el-tag>
+             </span>
+             <div class="operate-button-container"  v-if="item.status==1" v-hasPermi="['his:integralOrder:sendGoods']">
+                <el-button size="mini" @click="sendVisible=true" >发货</el-button>
+             </div>
+            <div class="operate-button-container"   v-if="item.deliverySn!=null" v-hasPermi="['his:integralOrder:express']">
+              <el-button size="mini" @click="showExpress()" >查看物流</el-button>
+            </div>
+
+            <div class="operate-button-container"  v-hasPermi="['his:integralOrder:edit']">
+              <el-button size="mini" @click="updateOrder()" >修改订单</el-button>
+            </div>
+           </div>
+           <div class="desct">
+            基本信息
+           </div>
+           <el-descriptions title="" :column="3" border>
+             <el-descriptions-item label="订单编号"><span v-if="item!=null">{{item.orderCode}}</span></el-descriptions-item>
+              <el-descriptions-item label="会员ID"><span v-if="item!=null">{{item.userId}}</span></el-descriptions-item>
+             <el-descriptions-item label="会员"><span v-if="item.nickName!=null">{{item.nickName}}({{item.phone}})</span></el-descriptions-item>
+             <el-descriptions-item label="用户名称"><span v-if="item!=null">{{item.userName}}</span></el-descriptions-item>
+             <el-descriptions-item label="用户电话"><span v-if="item!=null">{{item.userPhone}}</span>
+              <el-button icon="el-icon-search" size="mini" @click="handlePhone()" style="margin-left: 20px;" circle v-hasPermi="['his:integralOrder:queryPhone']"></el-button>
+            </el-descriptions-item>
+              <el-descriptions-item label="用户地址"><span v-if="item!=null">{{item.userAddress}}</span></el-descriptions-item>
+             <el-descriptions-item label="支付积分"><span v-if="item!=null">{{item.integral}}</span></el-descriptions-item>
+             <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+             <el-descriptions-item label="快递公司编号"><span v-if="item!=null">{{item.deliveryCode}}</span></el-descriptions-item>
+             <el-descriptions-item label="快递名称"><span v-if="item!=null">{{item.deliveryName}}</span></el-descriptions-item>
+             <el-descriptions-item label="快递单号"><span v-if="item!=null">{{item.deliverySn}}</span></el-descriptions-item>
+             <el-descriptions-item label="发货时间"><span v-if="item!=null">{{item.deliveryTime}}</span></el-descriptions-item>
+             <el-descriptions-item label="提交时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+           </el-descriptions>
+         </el-card>
+
+    </div>
+      <div class="contentx" v-if="item!=null" style="padding-bottom: 70px;">
+       <div class="desct">
+           商品信息
+          </div>
+       <el-table
+              border
+              v-if="prod!=null"
+              :data="prod"
+              size="small"
+              style="margin-top: 20px" >
+              <el-table-column label="商品图片"  align="center">
+                <template slot-scope="scope">
+                  <img :src="scope.row.imgUrl" style="height: 80px">
+                </template>
+              </el-table-column>
+              <el-table-column label="商品名称"  align="center">
+                <template slot-scope="scope">
+                  <p>{{scope.row.goodsName}}</p>
+                </template>
+              </el-table-column>
+              <el-table-column label="积分" align="center">
+                <template slot-scope="scope">
+                  <p>¥{{scope.row.integral}}</p>
+                </template>
+              </el-table-column>
+
+            </el-table>
+       </div>
+      <el-dialog
+           width="50%"
+           title="发货"
+           :visible.sync="sendVisible"
+           append-to-body @close="sendCancel">
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+          <el-form-item label="快递公司编号" prop="deliveryCode">
+                    <el-input v-model="form.deliveryCode" placeholder="请输入快递公司编号" />
+                  </el-form-item>
+                  <el-form-item label="快递名称" prop="deliveryName">
+                    <el-input v-model="form.deliveryName" placeholder="请输入快递名称" />
+                  </el-form-item>
+                  <el-form-item label="快递单号" prop="deliverySn">
+                    <el-input v-model="form.deliverySn" placeholder="请输入快递单号" />
+                  </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+                          <el-button type="primary" @click="sendGoods">确 定</el-button>
+                          <el-button @click="sendCancel">取 消</el-button>
+        </div>
+
+          </el-dialog>
+
+          <el-dialog :title="expressDialog.title" :visible.sync="expressDialog.open" width="600px" append-to-body>
+            <el-table style="margin-top: 20px;width: 100%"
+                      ref="orderHistoryTable"
+                      :data="traces" border>
+              <el-table-column label="操作时间"  width="160" align="center">
+                <template slot-scope="scope">
+                  {{scope.row.AcceptTime}}
+                </template>
+              </el-table-column>
+               <el-table-column label="位置" align="center">
+                <template slot-scope="scope">
+                  {{scope.row.Location}}
+                </template>
+              </el-table-column>
+              <el-table-column label="描述" align="center">
+                <template slot-scope="scope">
+                  {{scope.row.AcceptStation}}
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-dialog>
+
+          <el-dialog :title="editOrder.title" :visible.sync="editOrder.open" width="600px" append-to-body>
+            <el-form ref="editForm" :model="editForm" :rules="editRules" label-width="100px">
+              <el-form-item label="订单状态" prop="status" >
+                <el-select v-model="editForm.status" placeholder="请选择状态" clearable size="small" filterable>
+                    <el-option
+                      v-for="dict in statusOptions "
+                      :key="dict.dictValue"
+                      :label="dict.dictLabel"
+                      :value="dict.dictValue"
+                    />
+                  </el-select>
+                </el-form-item>
+              <el-form-item label="详情地址" prop="userAddress"  >
+                <el-input v-model="editForm.userAddress" placeholder="请输入" />
+              </el-form-item>
+              <el-form-item label="备注" prop="remark"  >
+                <el-input v-model="editForm.remark" placeholder="请输入备注" />
+              </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="submitEditForm">确 定</el-button>
+            </div>
+          </el-dialog>
+    </div>
+</template>
+
+<script>
+import {getExpress, listIntegralOrder, sendgoods,getIntegralOrder, delIntegralOrder, addIntegralOrder, updateIntegralOrder, exportIntegralOrder,getOrderUserPhone } from "@/api/store/integralOrder";
+  export default {
+    name: "integralOrder",
+    data() {
+      return {
+        expressDialog:{
+          title:"物流信息",
+          open:false,
+        },
+        editOrder:{
+          title:"修改订单",
+          open:false,
+        },
+        editForm:{
+          orderId:null,
+          status:null,
+          userAddress:null,
+          remark:"",
+        },
+        editRules:{},
+        item:null,
+        express:null,
+        traces:[],
+        rules:{
+      deliveryCode: [
+        { required: true, message: '请输入快递公司编号', trigger: 'blur' }
+      ],
+      deliveryName: [
+        { required: true, message: '请输入快递名称', trigger: 'blur' }
+      ],
+      deliverySn: [
+        { required: true, message: '请输入快递单号', trigger: 'blur' }
+      ]
+    },
+        sendVisible:false,
+        form: {
+          deliveryCode: null,
+          deliveryName:null,
+          deliverySn:null,
+          orderId:null,
+        }
+      }
+    },
+    created() {
+      this.getDicts("sys_integral_order_status").then(response => {
+        this.statusOptions = response.data;
+      });
+    },
+    methods: {
+      handlePhone(){
+        const orderId = this.item.orderId;
+        getOrderUserPhone(orderId).then(response =>{
+            this.item.userPhone = response.userPhone;
+        })
+      },
+      updateOrder(){
+        this.editOrder.open=true;
+        this.editForm.orderId=this.item.orderId;
+        this.editForm.remark=this.item.remark;
+        this.editForm.status = this.item.status.toString();
+        this.editForm.userAddress = this.item.userAddress.toString();
+      },
+     //修改订单状态
+     submitEditForm(){
+        this.$refs["editForm"].validate(valid => {
+        if (valid) {
+          updateIntegralOrder(this.editForm).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("操作成功");
+              this.editOrder.open = false;
+              this.getDetails(this.item.orderId);
+              }
+            });
+          }
+        });
+      },
+      sendCancel(){
+           this.sendVisible = false;
+           this.form={
+             deliveryCode: null,
+             deliveryName:null,
+             deliverySn:null,
+             orderId:null,
+           }
+      },
+      showExpress(){
+        this.expressDialog.open=true;
+        getExpress(this.item.orderId).then(response => {
+            this.express = response.data;
+            if(this.express!=null&&this.express.Traces!=null){
+                this.traces=this.express.Traces
+            }
+        });
+      },
+          sendGoods(){
+              this.form.orderId=this.item.orderId;
+              sendgoods(this.form).then(response => {
+                    this.msgSuccess("修改成功");
+                    this.sendVisible = false;
+                    getIntegralOrder(this.item.orderId).then(response => {
+                        this.item = response.data;
+                        this.$parent.$parent.getList();
+                    });
+
+                    this.form={
+                    deliveryCode: null,
+                    deliveryName:null,
+                    deliverySn:null,
+                    orderId:null,
+                  }
+              });
+            },
+      getDetails(orderId) {
+        this.item=null;
+        getIntegralOrder(orderId).then(response => {
+            this.item = response.data;
+            this.prod=[JSON.parse(this.item.itemJson)];
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+.operate-container {
+  background: #F2F6FC;
+  height: 60px;
+  margin: -20px -20px 0;
+  line-height: 60px;
+}
+.order-content{
+  margin: 10px;
+
+}
+.operate-button-container {
+  float: right;
+  margin-right: 20px
+}
+</style>

+ 80 - 0
src/api/hisStore/components/medicatedFoodDetails.vue

@@ -0,0 +1,80 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         药膳详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 药膳信息</div>
+        <el-descriptions title="" :column="3" border>
+          <<el-descriptions-item label="图片" >
+              <el-image
+                      style="width: 100px"
+                      :src="item.imgUrl"
+                      :preview-src-list="[item.imgUrl]">
+              </el-image>
+            </el-descriptions-item>
+          <el-descriptions-item label="药膳名称"><span v-if="item!=null">{{item.foodName}}</span></el-descriptions-item>
+          <el-descriptions-item label="排序"><span v-if="item!=null">{{item.sort}}</span></el-descriptions-item>
+           <el-descriptions-item label="功效"><span v-if="item!=null">{{item.action}}</span></el-descriptions-item>
+          <el-descriptions-item label="食材"><span v-if="item!=null">{{item.food}}</span></el-descriptions-item>
+
+          <el-descriptions-item label="创建时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+          <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+          <el-descriptions-item label="主治疾病" span="3"><span v-if="item!=null" >{{item.indications}}</span></el-descriptions-item>
+          <el-descriptions-item label="描述" span="3"><span v-if="item!=null" > <span v-html="item.descs"></span></span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+
+
+    </div>
+</template>
+
+<script>
+import { listMedicatedFood, getMedicatedFood, delMedicatedFood, addMedicatedFood, updateMedicatedFood, exportMedicatedFood } from "@/api/store/medicatedFood";
+  export default {
+    name: "MedicatedFoodDetails",
+    data() {
+      return {
+        item:null,
+      }
+    },
+    created() {
+        this.getDicts("sys_company_status").then(response => {
+          this.statusOptions = response.data;
+        });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getMedicatedFood(orderId).then(response => {
+            this.item = response.data;
+       
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 369 - 0
src/api/hisStore/components/offlineOrder.vue

@@ -0,0 +1,369 @@
+<template>
+  <div class="order-content">
+      <div class="order-status" v-if="order!=null" >
+          <el-steps  :active="order.status===3?order.status+1:order.status" align-center>
+            <el-step title="客服制单"></el-step>
+            <el-step title="待业务核实"></el-step>
+            <el-step title="待主管审核"></el-step>
+            <el-step title="内勤对流向"></el-step>
+          </el-steps>
+      </div>
+      <div>
+
+      <el-card shadow="never" style="margin-top: 15px">
+      <div class="operate-container"  v-if="order!=null">
+        <span  style="margin-left: 20px" class="color-danger">订单状态:
+           <el-tag prop="status" v-for="(item, index) in statusOptions"    v-if="order.status.toString()===item.dictValue">{{item.dictLabel}}</el-tag>
+        </span>
+
+        <div class="operate-button-container" >
+          <el-button size="mini" v-if="order.status ===2" @click="handleAudit()"  v-hasPermi="['store:storeOrderOffline:audit']" >主管审核</el-button>
+        </div>
+      </div>
+      <div style="margin: 20px 0px"  v-if="order!=null">
+        <span class="font-small">
+          基本信息
+        </span>
+      </div>
+      <el-descriptions :column="4" border  >
+        <el-descriptions-item label="订单ID"  >
+                <span v-if="order!=null">
+                  {{order.orderId}}
+                </span>
+        </el-descriptions-item>
+            <el-descriptions-item label="订单编号"  >
+                <span v-if="order!=null">
+                  {{order.orderCode}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="客户名称"  >
+                <span v-if="order!=null">
+                  {{order.customerName}}
+                </span>
+            </el-descriptions-item>
+
+
+            <el-descriptions-item label="客户电话"  >
+                <span v-if="order!=null ">
+                  {{order.mobile }}
+                </span>
+                <el-button icon="el-icon-search" size="mini" @click="handlePhone()" style="margin-left: 20px;" circle v-hasPermi="['store:storeOrderOffline:queryPhone']"></el-button>
+              </el-descriptions-item>
+              <el-descriptions-item v-if="order!=null " label="应付金额"  >
+                <span >
+                  {{order.payPrice }}
+                </span>
+              </el-descriptions-item>
+              <el-descriptions-item v-if="order!=null " label="实付金额"  >
+                <span >
+                  {{order.payMoney }}
+                </span>
+              </el-descriptions-item>
+              <el-descriptions-item v-if="customerInfo!=null " label="客户编码"  >
+                <span >
+                  {{customerInfo.customerCode }}
+                </span>
+              </el-descriptions-item>
+            <el-descriptions-item label="创建时间"  >
+                <span v-if="order!=null ">
+                  {{order.createTime }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="所属客服"  >
+                <span v-if="order!=null ">
+                  {{order.companyUserName }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="所属部门"  >
+              <span v-if="order!=null ">
+                {{order.companyName }}
+              </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="所属业务员"  >
+              <span v-if="order!=null ">
+                {{order.uploadUserName }}
+              </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="凭证上传时间"  >
+                  <span v-if="order!=null ">
+                    {{order.uploadTime }}
+                  </span>
+            </el-descriptions-item>
+        <el-descriptions-item label="审核人"  >
+                  <span v-if="order!=null ">
+                    {{order.auditBy }}
+                  </span>
+        </el-descriptions-item>
+        <el-descriptions-item label="审核时间"  >
+                  <span v-if="order!=null ">
+                    {{order.auditTime }}
+                  </span>
+        </el-descriptions-item>
+            <el-descriptions-item label="备注"  >
+                <span v-if="order!=null ">
+                  {{order.remark }}
+                </span>
+            </el-descriptions-item>
+
+
+
+      </el-descriptions>
+      <div style="margin: 20px 0px"  v-if="certificates!=null">
+        <span class="font-small">
+          凭证信息
+        </span>
+      </div>
+      <el-image
+          v-if="this.certificates != null"
+          :src="certificates"
+          :preview-src-list="[certificates]"
+          :style="{ width: '100px', height: '100px' }"
+          @click.native="showImageDialog"
+        ></el-image>
+        <el-dialog :visible.sync="dialogVisibleImage" width="10%">
+          <img :src="certificates" style="width: 100%" alt="">
+        </el-dialog>
+
+      <div style="margin-top: 20px">
+        <span class="font-small">商品信息</span>
+      </div>
+      <el-table
+        border
+        v-if="items!=null"
+        :data="items"
+        size="small"
+        style="width: 100%;margin-top: 20px" >
+        <el-table-column label="商品图片" width="150" align="center">
+          <template slot-scope="scope">
+            <img :src="JSON.parse(scope.row.jsonInfo).image" style="height: 80px">
+          </template>
+        </el-table-column>
+        <el-table-column label="商品名称" width="300" align="center">
+          <template slot-scope="scope">
+            <p>{{JSON.parse(scope.row.jsonInfo).productName}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="单价" width="240" align="center">
+          <template slot-scope="scope">
+            <p>¥{{JSON.parse(scope.row.jsonInfo).price.toFixed(2)}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="规格" width="240" align="center">
+          <template slot-scope="scope">
+            {{JSON.parse(scope.row.jsonInfo).sku}}
+          </template>
+        </el-table-column>
+        <el-table-column label="数量" width="180" align="center">
+          <template slot-scope="scope">
+            {{scope.row.num}}
+          </template>
+        </el-table-column>
+<!--        <el-table-column label="小计"  align="center">-->
+<!--          <template slot-scope="scope" >-->
+<!--            ¥{{scope.row.num*JSON.parse(scope.row.jsonInfo).price.toFixed(2)}}-->
+<!--          </template>-->
+<!--        </el-table-column>-->
+      </el-table>
+<!--      <div style="float: right;margin: 20px" v-if="order!=null">-->
+<!--        合计:<span class="color-danger">¥{{order.totalPrice.toFixed(2)}}</span>-->
+<!--      </div>-->
+      </el-card>
+    </div>
+    <el-dialog :title="certificateDialig.title" :visible.sync="certificateDialig.open" append-to-body>
+      <el-form ref="certificateForm" :model="certificateForm" :rules="certificateRules" label-width="100px">
+        <el-form-item label="凭证" prop="certificates">
+          <ImageUpload v-model="photoArr" type="image" :limit="1" :width="150" :height="150" />
+        </el-form-item>
+        <el-form-item label="实付金额" prop="payPrice">
+          <el-input-number v-model="certificateForm.payMoney"  size="mini"    ></el-input-number>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-drawer
+      :append-to-body="true"
+      size="75%"
+      :title="customer.title" :visible.sync="customer.open" append-to-body
+      >
+        <customer-details  ref="customerDetails" />
+    </el-drawer>
+
+  </div>
+</template>
+
+<script>
+import { listStoreOrderOffline, getStoreOrderOffline,auditOrder,getPhone } from "@/api/store/storeOrderOffline";
+import ImageUpload from '@/components/ImageUpload'
+import customerDetails from '../../crm/components/customerDetails.vue';
+export default {
+  name: "offlineOrder",
+  components: {customerDetails,
+    ImageUpload},
+  data() {
+    return {
+      customerUserStatusOptions:[],
+      scheduleOptions:[],
+      dialogVisibleImage: false,
+      customerInfo:null,
+      customer:{
+        title:"客户详情",
+        open:false,
+      },
+      photoArr:null,
+      certificateDialig:{
+        title:"上传凭证",
+        open:false,
+      },
+      certificateForm:{
+        payMoney:null,
+        certificates:null,
+      },
+      addSms:{
+        open:false,
+        title:"发短信"
+      },
+      certificateRules:{
+        certificates:[
+          { required: true, message: "凭证不能为空", trigger: "change" }
+        ]
+      },
+      customers:[],
+
+      orderId:null,
+      statusOptions:[],
+      certificates:null,
+      order:null,
+      user:{},
+      logs:[],
+      items:[],
+      express:[],
+      traces:[],
+      payments:[],
+    };
+  },
+  created() {
+    this.getDicts("crm_customer_user_status").then((response) => {
+            this.customerUserStatusOptions = response.data;
+        });
+    this.getDicts("sys_order_offline_status").then((response) => {
+      this.statusOptions = response.data;
+    });
+
+  },
+  computed: {
+  },
+  methods: {
+
+    handlePhone(){
+        const id = this.orderId;
+        getPhone(id).then(response =>{
+          this.order.mobile = response.userPhone;
+        })
+      },
+
+    showImageDialog() {
+      this.dialogVisible = true;
+    },
+    handleCustomer(){
+      var that=this;
+      this.customer.open = true;
+      setTimeout(() => {
+          that.$refs.customerDetails.getDetails(this.order.crmId);
+      }, 200);
+    },
+    handleCertificates(){
+      this.certificateDialig.open = true;
+      this.photoArr = null;
+    },
+    handleConfirm(){
+      this.certificateForm.orderId = this.orderId;
+      this.certificateForm.certificates = this.photoArr;
+      uploadCredentials(this.certificateForm).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("上传成功");
+                this.certificateDialig.open = false;
+                this.getOfflineOrder(this.orderId);
+              }
+            });
+    },
+    getOfflineOrder(orderId){
+      this.order = null;
+      this.orderId=orderId;
+      this.certificates = null;
+      getStoreOrderOffline(orderId).then(response => {
+            this.order = response.order;
+            if(response.order.certificates != null){
+              this.certificates = response.order.certificates;
+            }
+            this.items = response.items;
+            this.customerInfo=response.customer;
+        });
+     },
+    /** 审核按钮操作 */
+    handleAudit() {
+      this.$confirm('是否确认审核线下订单编号为"' + this.orderId + '"的数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        return auditOrder(this.orderId);
+      }).then(() => {
+        this.getOfflineOrder(this.orderId);
+        this.msgSuccess("审核成功");
+      }).catch(() => {});
+    }
+  }
+};
+</script>
+<style scoped>
+.order-content{
+  margin: 10px;
+}
+.detail-container {
+  width: 80%;
+  padding: 20px 20px 20px 20px;
+  margin: 20px auto;
+}
+
+.operate-container {
+  background: #F2F6FC;
+  height: 60px;
+  margin: -20px -20px 0;
+  line-height: 60px;
+}
+
+.operate-button-container {
+  float: right;
+  margin-right: 20px
+}
+
+.table-layout {
+  margin-top: 20px;
+  border-left: 1px solid #DCDFE6;
+  border-top: 1px solid #DCDFE6;
+}
+
+.table-cell {
+  height: 60px;
+  line-height: 40px;
+  border-right: 1px solid #DCDFE6;
+  border-bottom: 1px solid #DCDFE6;
+  padding: 10px;
+  font-size: 14px;
+  color: #606266;
+  text-align: center;
+  overflow: hidden;
+}
+
+.table-cell-title {
+  border-right: 1px solid #DCDFE6;
+  border-bottom: 1px solid #DCDFE6;
+  padding: 10px;
+  background: #F2F6FC;
+  text-align: center;
+  font-size: 14px;
+  color: #303133;
+}
+</style>

+ 398 - 0
src/api/hisStore/components/productAfterSalesOrder.vue

@@ -0,0 +1,398 @@
+<template>
+  <div class="order-content">
+      <div class="order-status" v-if="afterSales!=null" >
+          <el-steps  :active="afterSales.status==4?afterSales.status+1:afterSales.status" align-center>
+            <el-step title="待审核(24小时自动审核)"></el-step>
+            <el-step title="平台已审核等待用户发货"></el-step>
+            <el-step title="用户已发货待仓库审核"></el-step>
+            <el-step title="财务审核"></el-step>
+            <el-step title="退款成功"></el-step>
+          </el-steps>
+      </div>
+      <div v-if="afterSales!=null">
+      <el-card shadow="never" style="margin-top: 15px">
+        <div class="operate-container">
+          <span style="margin-left: 20px" class="color-danger">售后状态:
+            <el-tag prop="status" v-for="(item, index) in salesStatusOptions"    v-if="afterSales.salesStatus==item.dictValue">{{item.dictLabel}}</el-tag>
+          </span>
+          <div class="operate-button-container"  >
+            <el-button size="mini"  v-hasPermi="['store:storeAfterSales:edit']" v-show="afterSales.salesStatus==0&&afterSales.status===1"  @click="addDelivery">编辑物流</el-button>
+            <el-button size="mini"  v-hasPermi="['store:storeAfterSales:audit1']" v-show="afterSales.salesStatus==0&&afterSales.status===0" @click="handleAudit1">平台审核</el-button>
+            <el-button size="mini"  v-hasPermi="['store:storeAfterSales:audit2']" v-show="afterSales.salesStatus==0&&afterSales.status===2" @click="handleAudit2">仓库审核</el-button>
+            <el-button size="mini"  v-hasPermi="['store:storeAfterSales:refund']" @click="handleRefund"  v-show="afterSales.salesStatus==0&&afterSales.status===3">财务审核</el-button>
+            <el-button size="mini"  v-hasPermi="['store:storeAfterSales:cancel']" @click="cancel"  v-show="afterSales.salesStatus==0">撤销</el-button>
+            <el-button size="mini"  @click="showOrder">查看订单</el-button>
+         </div>
+        </div>
+        <div style="margin: 20px 0px">
+          <span class="font-small">基本信息</span>
+        </div>
+        <el-descriptions   :column="4" border  >
+            <el-descriptions-item label="订单编号"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.orderCode}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="会员"  >
+                <span v-if="user!=null">
+                  {{user.nickname}}({{user.phone}})
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="退款金额"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.refundAmount}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="申请类型"  >
+                <span v-if="afterSales!=null">
+                  <el-tag  v-for="(item, index) in serviceTypeOptions"    v-if="afterSales.serviceType==item.dictValue" >{{item.dictLabel}}</el-tag>
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="申请原因"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.reasons}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="说明"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.explains}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="状态"  >
+                <span v-if="afterSales!=null">
+                  <el-tag   v-for="(item, index) in statusOptions"    v-if="afterSales.status==item.dictValue" >{{item.dictLabel}}</el-tag>
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="售后状态"  >
+                <span v-if="afterSales!=null">
+                  <el-tag  v-for="(item, index) in salesStatusOptions"    v-if="afterSales.salesStatus==item.dictValue" >{{item.dictLabel}}</el-tag>
+                </span>
+            </el-descriptions-item>
+
+        </el-descriptions>
+        <div style="margin: 20px 0px">
+          <span class="font-small">收货信息</span>
+        </div>
+        <el-descriptions   :column="4" border  >
+            <el-descriptions-item label="收货人"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.consignee}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="收货人"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.consignee}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="手机号码"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.phoneNumber}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="收货地址"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.address}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="快递公司"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.deliveryName}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="运单号"  >
+                <span v-if="afterSales!=null">
+                  {{afterSales.deliverySn}}
+                </span>
+            </el-descriptions-item>
+        </el-descriptions>
+        <div style="margin-top: 20px">
+          <span class="font-small">商品信息</span>
+        </div>
+        <el-table
+          border
+          :data="items"
+          size="small"
+          style="width: 100%;margin-top: 20px" >
+          <el-table-column label="商品图片" width="150" align="center">
+            <template slot-scope="scope">
+              <img :src="JSON.parse(scope.row.jsonInfo).image" style="height: 80px">
+            </template>
+          </el-table-column>
+          <el-table-column label="商品名称" width="300" align="center">
+            <template slot-scope="scope">
+              <p>{{JSON.parse(scope.row.jsonInfo).productName}}</p>
+            </template>
+          </el-table-column>
+          <el-table-column label="价格" width="240" align="center">
+            <template slot-scope="scope">
+              <p>价格:¥{{JSON.parse(scope.row.jsonInfo).price}}</p>
+
+            </template>
+          </el-table-column>
+          <el-table-column label="属性" width="240" align="center">
+            <template slot-scope="scope">
+              {{JSON.parse(scope.row.jsonInfo).sku}}
+            </template>
+          </el-table-column>
+          <el-table-column label="数量" width="180" align="center">
+            <template slot-scope="scope">
+                {{scope.row.num}}
+            </template>
+          </el-table-column>
+          <el-table-column label="小计"  align="center">
+            <template slot-scope="scope">
+              ¥{{scope.row.num*JSON.parse(scope.row.jsonInfo).price}}
+            </template>
+          </el-table-column>
+        </el-table>
+        <div style="margin-top: 20px">
+          <svg-icon icon-class="marker" style="color: #606266"></svg-icon>
+          <span class="font-small">操作信息</span>
+        </div>
+        <el-table style="margin-top: 20px;width: 100%"
+                  ref="orderHistoryTable"
+                  :data="logs" border>
+          <el-table-column label="操作时间"  width="160" align="center">
+            <template slot-scope="scope">
+              {{scope.row.changeTime}}
+            </template>
+          </el-table-column>
+          <el-table-column label="备注" align="center">
+            <template slot-scope="scope">
+              {{scope.row.changeMessage}}
+            </template>
+          </el-table-column>
+          <el-table-column label="操作员" align="center">
+            <template slot-scope="scope">
+              {{scope.row.operator}}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-card>
+
+    </div>
+    <el-dialog :title="audit.title" :visible.sync="audit.open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="退款金额" prop="refundAmount"  >
+          <el-input-number v-model="form.refundAmount" :min="0"  />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitAuditForm">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-drawer
+    :append-to-body="true"
+     size="75%"
+      :title="show.title" :visible.sync="show.open"
+      >
+      <product-order  ref="productOrder" />
+    </el-drawer>
+    <el-dialog :title="add.title" :visible.sync="add.open" width="500px" append-to-body>
+
+      <div slot="footer" class="dialog-footer">
+        <el-form ref="addForm" :model="addForm" :rules="addRules" label-width="100px">
+          <el-form-item label="id" prop="id" v-if="false">
+            <el-input v-model="addForm.id" placeholder="请输入"  />
+          </el-form-item>
+          <el-form-item label="快递公司" prop="deliveryName">
+            <el-input v-model="addForm.deliveryName" placeholder="请输入"  />
+          </el-form-item>
+          <el-form-item label="运单号" prop="deliverySn">
+            <el-input v-model="addForm.deliverySn" placeholder="请输入"  />
+          </el-form-item>
+        </el-form>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel1">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {getStoreAfterSales,cancel,refund,audit1,audit2,updateStoreAfterSales} from "@/api/store/storeAfterSales";
+
+import productOrder from "./productOrder";
+export default {
+  components: { productOrder },
+  name: "order",
+  data() {
+    return {
+      show:{
+        open:false,
+        title:"订单详情"
+      },
+      audit:{
+          title:"财务审核",
+          open:false,
+      },
+      add:{
+        open:false,
+        title:"添加物流"
+      },
+      addForm:{
+        id:null,
+        deliveryName:null,
+        deliverySn:null
+      },
+      addRules:{
+        deliveryName: [
+          { required: true, message: "物流名称不能为空", trigger: "blur" }
+        ],
+        deliverySn: [
+          { required: true, message: "物流单号不能为空", trigger: "blur" }
+        ],
+      },
+      order:null,
+      user:null,
+      serviceTypeOptions:[],
+      salesStatusOptions:[],
+      statusOptions:[],
+      afterSales:null,
+      items:[],
+      logs:[],
+      form:{
+        refundAmount:0,
+      },
+      rules:{
+        status: [
+          { required: true, message: "状态不能为空", trigger: "blur" }
+        ],
+        refundAmount: [
+          { required: true, message: "退款金额不能为空", trigger: "blur" }
+        ],
+      }
+
+    };
+  },
+  created() {
+    this.getDicts("store_after_sales_sales_status").then((response) => {
+        this.salesStatusOptions = response.data;
+    });
+    this.getDicts("store_after_sales_status").then((response) => {
+        this.statusOptions = response.data;
+    });
+     this.getDicts("store_after_sales_service_type").then((response) => {
+        this.serviceTypeOptions = response.data;
+    });
+  },
+  methods: {
+    submitForm() {
+      var id=this.afterSales.id;
+      this.addForm.id = id;
+      updateStoreAfterSales(this.addForm).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("编辑成功");
+                this.add.open = false;
+                this.getStoreAfterSales(id);
+              }
+            });
+    },
+    cancel1(){
+      this.add.open = false;
+    },
+    addDelivery(){
+      this.add.open = true;
+      this.addForm.deliveryName = this.afterSales.deliveryName;
+      this.addForm.deliverySn = this.afterSales.deliverySn;
+    },
+    showOrder(){
+      this.show.open=true;
+      const orderId = this.order.id ;
+      setTimeout(() => {
+        this.$refs.productOrder.getOrder(orderId);
+      }, 500);
+    },
+    handleAudit1(){
+      var id=this.afterSales.id;
+      this.$confirm('确定审请通过?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={salesId:id}
+          return audit1(data);
+        }).then(() => {
+          this.getStoreAfterSales(id);
+          this.msgSuccess("操作成功");
+        }).catch(function() {});
+
+    },
+    handleAudit2(){
+      var id=this.afterSales.id;
+      this.$confirm('确定审请通过?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={salesId:id}
+          return audit2(data);
+        }).then(() => {
+          this.getStoreAfterSales(id);
+          this.msgSuccess("操作成功");
+        }).catch(function() {});
+
+    },
+    handleRefund(){
+        this.audit.open=true;
+        this.form.salesId=this.afterSales.id;
+        this.form.refundAmount=this.afterSales.refundAmount;
+    },
+    submitAuditForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          refund(this.form).then(response => {
+              if (response.code === 200) {
+                this.audit.open = false;
+                this.getStoreAfterSales(this.afterSales.id);
+                this.msgSuccess("操作成功");
+              }
+            });
+        }
+      });
+    },
+    cancel(){
+      var id=this.afterSales.id;
+      this.$prompt('是否确定取消订单?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+      }).then(({ value }) => {
+        var data={salesId:id,remark:value};
+        return cancel(data);
+      }).then(() => {
+        this.getStoreAfterSales(id);
+        this.msgSuccess("操作成功");
+      }).catch(() => {
+
+      });
+    },
+    getStoreAfterSales(id){
+        getStoreAfterSales(id).then(response => {
+            this.afterSales = response.afterSales;
+            this.logs = response.logs;
+            this.items = response.items;
+            this.user=response.user;
+            this.order=response.order;
+        });
+     }
+  }
+};
+</script>
+<style scoped>
+.order-content{
+  margin: 10px;
+}
+
+.operate-container {
+  background: #F2F6FC;
+  height: 60px;
+  margin: -20px -20px 0;
+  line-height: 60px;
+}
+
+.operate-button-container {
+  float: right;
+  margin-right: 20px
+}
+
+</style>

+ 114 - 0
src/api/hisStore/components/productAttrValueSelect.vue

@@ -0,0 +1,114 @@
+<template>
+  <div class="product-select" >
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="商品名称" prop="productName">
+        <el-input
+          style="width:200px"
+          v-model="queryParams.productName"
+          placeholder="请输入商品名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table border v-loading="loading" :data="list">
+      <el-table-column label="商品编号" align="center" prop="barCode" />
+      <el-table-column label="商品图片" align="center" width="100">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="scope.row.image" width="80">
+            <img :src="scope.row.image" style="max-width: 80px;">
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="商品名称" show-overflow-tooltip align="center" prop="productName" />
+      <el-table-column label="商品规格" align="center" prop="sku" />
+      <el-table-column label="库存" align="center" prop="stock" />
+      <el-table-column label="单价" align="center" prop="price" />
+      <el-table-column label="操作" align="center" width="100px" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleSelect(scope.row)"
+          >选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      style="padding-bottom:10px;"
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { getStoreProductAttrValueList } from "@/api/store/storeProduct";
+export default {
+  name: "selectProduct",
+  props: {
+    companyId:{
+      type: Number,
+      default: null
+    }
+  },
+  data() {
+    return {
+      loading: true,
+      list:[],
+      total: 0,
+      queryParams: {
+        productName:"",
+        pageNum: 1,
+        pageSize: 10,
+        isPackage:0,
+        companyId: this.companyId
+      }
+    };
+  },
+  created() {
+     this.getList();
+  },
+  methods: {
+    getData(isPackage){
+      this.queryParams.isPackage=isPackage;
+      this.getList();
+
+    },
+    handleSelect(row){
+      this.$emit('selectProduct',row);
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    getList(){
+      this.loading = true;
+      getStoreProductAttrValueList(this.queryParams).then(response => {
+        this.list = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    }
+  }
+};
+</script>
+<style scoped>
+
+.product-select{
+  padding-bottom: 15px;
+}
+</style>

+ 860 - 0
src/api/hisStore/components/productOrder.vue

@@ -0,0 +1,860 @@
+<template>
+  <div class="order-content">
+      <div class="order-status" v-if="order!=null" >
+          <el-steps  :active="order.status==3?order.status+1:order.status" align-center>
+            <el-step title="待支付"></el-step>
+            <el-step title="待发货"></el-step>
+            <el-step title="待收货"></el-step>
+            <el-step title="交易完成"></el-step>
+          </el-steps>
+      </div>
+      <div>
+      <el-card shadow="never" style="margin-top: 15px">
+      <div class="operate-container"  v-if="order!=null">
+        <span style="margin-left: 20px" class="color-danger">订单状态:
+           <el-tag prop="status" v-for="(item, index) in statusOptions"   v-if="order.status==item.dictValue">{{item.dictLabel}}</el-tag>
+        </span>
+        <div class="operate-button-container" >
+          <el-button size="mini" @click="editOrder()"  v-hasPermi="['store:storeOrder:edit']" >修改订单</el-button>
+        </div>
+        <div class="operate-button-container"  v-hasPermi="['store:storeOrder:finishOrder']" v-if="order.status===2">
+          <el-button size="mini" @click="finishOrder()" >确认收货</el-button>
+        </div>
+        <div class="operate-button-container" v-if="order.status==1||order.status==2"  v-hasPermi="['store:storeOrder:refundOrderMoney']"  >
+          <el-button size="mini" @click="refundOrderMoney()" >退款</el-button>
+        </div>
+        <div class="operate-button-container"  v-hasPermi="['store:storeOrder:express']"  >
+          <el-button size="mini" @click="showExpress()" >查看物流</el-button>
+        </div>
+        <div class="operate-button-container" v-if="order.tuiMoneyStatus==0"  v-hasPermi="['store:storeOrder:editTuiMoney']"  >
+          <el-button size="mini" @click="editTuiMoney1()" >解冻</el-button>
+        </div>
+        <div class="operate-button-container" v-if="order.tuiMoneyStatus==1"  v-hasPermi="['store:storeOrder:editTuiMoney']"  >
+          <el-button size="mini" @click="editTuiMoney2()" >冻结</el-button>
+        </div>
+
+        <div class="operate-button-container" v-if="order.status==3&&order.tuiMoneyStatus==null"  v-hasPermi="['store:storeOrder:addTuiMoney']"  >
+          <el-button size="mini" @click="addTuiMoney()" >分佣</el-button>
+        </div>
+
+<!--        <div class="operate-button-container" v-if="order.extendOrderId!=null"  v-hasPermi="['store:storeOrder:getEroOrder']"  >
+          <el-button size="mini" @click="showErpOrder()" >查看ERP订单信息</el-button>
+        </div>-->
+        <div class="operate-button-container" v-if="order.isPayRemain!=null&&order.isPayRemain==1"  v-hasPermi="['store:storeOrder:auditPayRemain']"  >
+          <el-button size="mini" @click="auditPayRemain()" >尾款审核</el-button>
+        </div>
+        <div class="operate-button-container" >
+          <el-button size="mini" @click="editDelivery()"  v-hasPermi="['store:storeOrder:editDeliveryId']" >修改物流</el-button>
+        </div>
+        <div class="operate-button-container" v-if="order.status >=1 && order.extendOrderId == null && order.deliveryId == null"  v-hasPermi="['store:storeOrder:createErpOrder']"  >
+          <el-button size="mini" @click="addErpOrder()" >创建ERP订单信息</el-button>
+        </div>
+        <!-- <div class="operate-button-container" v-show="order.status===2">
+          <el-button size="mini"  >去发货</el-button>
+          <el-button size="mini" >备注订单</el-button>
+        </div>
+        <div class="operate-button-container" v-show="order.status===4">
+          <el-button size="mini"  >订单跟踪</el-button>
+          <el-button size="mini"  disabled>备注订单</el-button>
+        </div> -->
+      </div>
+      <div style="margin: 20px 0px">
+        <span class="font-small">基本信息</span>
+      </div>
+      <el-descriptions :column="4" border  >
+            <el-descriptions-item label="订单编号"  >
+                <span v-if="order!=null">
+                  {{order.orderCode}}
+                </span>
+                <el-tag  v-for="(item, index) in createTypeOptions"    v-if="order!=null&&order.orderCreateType==item.dictValue">{{item.dictLabel}}
+                </el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="会员"  >
+                <span v-if="user!=null">
+                  {{user.nickname}}({{user.phone}})
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="支付方式"  >
+              <el-tag prop="payType" v-for="(item, index) in payTypeOptions"    v-if="order!=null&&order.payType==item.dictValue">{{item.dictLabel}}
+              </el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="订单类型"  >
+              <el-tag prop="orderType" v-for="(item, index) in orderTypeOptions"    v-if="order!=null&&order.orderType==item.dictValue">{{item.dictLabel}}</el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流公司编号"  >
+                <span v-if="order!=null">
+                  {{order.deliverySn}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流公司名称"  >
+                <span v-if="order!=null">
+                  {{order.deliveryName}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流单号"  >
+                <span v-if="order!=null">
+                  {{order.deliveryId}}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流状态"  >
+                <span v-if="order!=null">
+                  <el-tag prop="deliveryId" v-for="(item, index) in deliveryStatusOptions"    v-if="order!=null&&order.deliveryStatus==item.dictValue">{{item.dictLabel}}</el-tag>
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流跟踪状态"  >
+                <span v-if="order!=null">
+                  <el-tag prop="deliveryId" v-for="(item, index) in deliveryTypeOptions"    v-if="order!=null&&order.deliveryType==item.dictValue">{{item.dictLabel}}</el-tag>
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="物流结算费用"  >
+                <span v-if="order!=null&&order.deliveryPayMoney!=null ">
+                  {{order.deliveryPayMoney.toFixed(2) }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="快递帐单日期"  >
+                <span v-if="order!=null ">
+                  {{order.deliveryTime }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="快递结算日期"  >
+                <span v-if="order!=null ">
+                  {{order.deliveryPayTime }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="推广佣金"  >
+                <span v-if="order!=null ">
+                  {{order.tuiMoney }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="收货人"  >
+                <span v-if="order!=null ">
+                  {{order.realName }}
+                </span>
+            </el-descriptions-item>
+            <el-descriptions-item label="手机号码"  >
+                <span v-if="order!=null ">
+                  {{order.userPhone }}
+                </span>
+                <el-button icon="el-icon-search" size="mini" @click="handlePhone()" style="margin-left: 20px;" circle v-hasPermi="['store:storeOrder:queryPhone']"></el-button>
+            </el-descriptions-item>
+            <el-descriptions-item label="收货地址"  >
+              <el-popover
+                v-if="order!=null"
+                placement="top-start"
+                title="收货地址"
+                width="300"
+                trigger="hover"
+                :content="order.userAddress">
+                <span slot="reference">{{order.userAddress}}</span>
+                <el-button icon="el-icon-search" size="mini" @click="handleAddress()" style="margin-left: 20px;" circle v-hasPermi="['store:storeOrder:queryAddress']"></el-button>
+              </el-popover>
+            </el-descriptions-item>
+            <el-descriptions-item label="档期归属"  >
+              <el-tag prop="scheduleId" v-for="(item, index) in scheduleOptions"    v-if="order!=null&&order.scheduleId==item.id">{{item.name}}
+              </el-tag>
+            </el-descriptions-item>
+            <el-descriptions-item label="用户备注"  >
+                <span v-if="order!=null">
+                  {{order.mark}}
+                </span>
+            </el-descriptions-item>
+      </el-descriptions>
+      <div style="margin: 20px 0px"  v-if="order!=null">
+        <span class="font-small">
+          凭证信息
+        </span>
+      </div>
+      <el-image
+          v-if="certificates != null"
+          :src="certificates"
+          :preview-src-list="[certificates]"
+          :style="{ width: '100px', height: '100px' }"
+          @click.native="showImageDialog"
+        ></el-image>
+        <el-dialog :visible.sync="dialogVisibleImage" width="10%">
+          <img :src="certificates" style="width: 100%" alt="">
+        </el-dialog>
+      <div style="margin-top: 20px">
+        <span class="font-small">商品信息</span>
+      </div>
+      <el-table
+        border
+        v-if="items!=null"
+        :data="items"
+        size="small"
+        style="width: 100%;margin-top: 20px" >
+        <el-table-column label="商品图片" width="150" align="center">
+          <template slot-scope="scope">
+            <img :src="JSON.parse(scope.row.jsonInfo).image" style="height: 80px">
+          </template>
+        </el-table-column>
+        <el-table-column label="商品编码" width="300" align="center">
+          <template slot-scope="scope">
+            <p>{{JSON.parse(scope.row.jsonInfo).barCode}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="商品组合编码" width="300" align="center">
+          <template slot-scope="scope">
+            <p>{{JSON.parse(scope.row.jsonInfo).groupBarCode}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="商品名称" width="300" align="center">
+          <template slot-scope="scope">
+            <p>{{JSON.parse(scope.row.jsonInfo).productName}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="单价" width="240" align="center">
+          <template slot-scope="scope">
+            <p>¥{{JSON.parse(scope.row.jsonInfo).price.toFixed(2)}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="规格" width="240" align="center">
+          <template slot-scope="scope">
+            {{JSON.parse(scope.row.jsonInfo).sku}}
+          </template>
+        </el-table-column>
+        <el-table-column label="数量" width="180" align="center">
+          <template slot-scope="scope">
+            {{scope.row.num}}
+          </template>
+        </el-table-column>
+        <el-table-column label="处方药" width="240" align="center">
+          <template slot-scope="scope">
+            {{scope.row.isPrescribe!=null&&scope.row.isPrescribe==1?'是':'否'}}
+          </template>
+        </el-table-column>
+        <el-table-column label="小计"  align="center">
+          <template slot-scope="scope" >
+            ¥{{scope.row.num*JSON.parse(scope.row.jsonInfo).price.toFixed(2)}}
+          </template>
+        </el-table-column>
+      </el-table>
+      <div style="float: right;margin: 20px" v-if="order!=null">
+        合计:<span class="color-danger">¥{{order.totalPrice.toFixed(2)}}</span>
+      </div>
+      <div style="margin: 60px 0px 20px 0px">
+        <span class="font-small">费用信息</span>
+      </div>
+      <el-descriptions   :column="4" border  >
+          <el-descriptions-item label="商品合计"  >
+              <span v-if="order!=null">
+                ¥{{order.totalPrice.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="应付金额"  >
+              <span v-if="order!=null">
+                ¥{{order.payPrice.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="运费"  >
+              <span v-if="order!=null">
+                ¥{{order.payPostage.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="优惠券"  >
+              <span v-if="order!=null">
+                ¥{{order.couponPrice.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="积分抵扣"  >
+              <span v-if="order!=null">
+                ¥{{order.deductionPrice.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="实付金额"  >
+              <span v-if="order!=null">
+                ¥{{order.payMoney.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="代收金额"  >
+              <span v-if="order!=null">
+                ¥{{order.payDelivery.toFixed(2)}}
+              </span>
+          </el-descriptions-item>
+      </el-descriptions>
+
+      <div style="margin-top: 20px">
+        <span class="font-small">支付信息</span>
+      </div>
+      <el-table
+        border
+        :data="payments"
+        size="small"
+        style="width: 100%;margin-top: 20px" >
+          <el-table-column label="支付单号" align="center" prop="payCode" width="120px" />
+          <el-table-column label="支付金额" align="center" prop="payMoney" />
+          <el-table-column label="类型" align="center" prop="payTypeCode" />
+          <el-table-column label="交易单号" align="center" prop="bankTransactionId" />
+          <el-table-column label="银行单号" align="center" prop="bankSerialNo" />
+          <el-table-column label="创建时间" align="center" prop="createTime" />
+          <el-table-column label="支付时间" align="center" prop="payTime" />
+      </el-table>
+
+
+      <div style="margin-top: 20px">
+        <span class="font-small">操作信息</span>
+      </div>
+      <el-table style="margin-top: 20px;width: 100%"
+                ref="orderHistoryTable"
+                :data="logs" border>
+        <el-table-column label="操作时间"  width="160" align="center">
+          <template slot-scope="scope">
+            {{scope.row.changeTime}}
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" align="center">
+          <template slot-scope="scope">
+            {{scope.row.changeMessage}}
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <div style="margin-top: 20px">
+        <!-- <svg-icon icon-class="marker" style="color: #606266"></svg-icon> -->
+        <span class="font-small">分佣信息</span>
+      </div>
+      <el-table
+        border
+        :data="tuiMoneyLogs"
+        size="small"
+                style="width: 100%;margin-top: 20px" >
+          <el-table-column label="公司名称" align="center" prop="companyName" width="120px" />
+          <el-table-column label="金额" align="center" prop="money" />
+          <el-table-column label="余额" align="center" prop="balance" />
+          <el-table-column label="创建时间" align="center" prop="createTime" />
+          <el-table-column label="备注" align="center" prop="remark" />
+      </el-table>
+
+        <div style="margin-top: 20px">
+          <span class="font-small">审批信息</span>
+        </div>
+        <el-table style="margin-top: 20px;width: 100%"
+                  :data="auditLogs" border>
+          <el-table-column label="操作时间"  width="160" align="center">
+            <template slot-scope="scope">
+              {{scope.row.createTime}}
+            </template>
+          </el-table-column>
+          <el-table-column label="备注" align="center">
+            <template slot-scope="scope">
+              {{scope.row.content}}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-card>
+    </div>
+
+    <el-dialog :title="edit.title" :visible.sync="edit.open" width="600px" append-to-body>
+      <el-form ref="editForm" :model="editForm" :rules="editRules" label-width="100px">
+        <el-form-item label="订单类型" prop="orderType"  >
+            <el-select style="width: 200px" v-model="editForm.orderType" placeholder="请选择订单类型" clearable size="small" >
+              <el-option
+                      v-for="item in orderTypeOptions"
+                      :key="item.dictValue"
+                      :label="item.dictLabel"
+                      :value="item.dictValue"
+                    />
+            </el-select>
+        </el-form-item>
+       <el-form-item label="状态" prop="status" >
+           <el-select style="width:220px" v-model="editForm.status" placeholder="请选择状态" clearable size="small">
+            <el-option key="0"  label="待支付" value="0" />
+            <el-option key="1"  label="待发货" value="1" />
+             <el-option key="2"  label="待收货" value="2" />
+             <el-option key="3"  label="交易成功" value="3" />
+             <el-option key="-1"  label="退款中" value="-1" />
+             <el-option key="-2"  label="已退款" value="-2" />
+             <el-option key="-3"  label="已取消" value="-3" />
+           </el-select>
+         </el-form-item>
+         <el-form-item label="档期归属" prop="scheduleId"  >
+            <el-select filterable style="width: 200px" v-model="editForm.scheduleId" placeholder="请选择档期" clearable size="small" >
+              <el-option
+                      v-for="item in scheduleOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+            </el-select>
+        </el-form-item>
+         <el-form-item label="详情地址" prop="userAddress"  >
+          <el-input v-model="editForm.userAddress" placeholder="请输入" />
+        </el-form-item>
+        <!-- <el-form-item label="erp单号" prop="extendOrderId"  >
+          <el-input v-model="editForm.extendOrderId" placeholder="请输入" />
+        </el-form-item> -->
+        <el-form-item label="备注" prop="mark"  >
+          <el-input v-model="editForm.mark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitEditForm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="editDy.title" :visible.sync="editDy.open" width="600px" append-to-body>
+      <el-form ref="editDyForm" :model="editDyForm" :rules="editDyRules" label-width="120px">
+      <div  v-hasPermi="['store:storeOrder:updateErpOrder']"  style="margin-bottom: 20px;" >
+        <el-button size="mini" @click="updateErpOrder" >同步物流单号信息</el-button>
+      </div>
+        <el-form-item label="物流公司" prop="deliverySn" >
+           <el-select style="width:220px" v-model="editDyForm.deliverySn" placeholder="请选择" clearable size="small">
+            <el-option key="SF"  label="顺丰" value="SF" />
+            <el-option key="EMS"  label="邮政" value="EMS" />
+             <el-option key="ZTO"  label="中通" value="ZTO" />
+             <el-option key="JD"  label="京东" value="JD" />
+             <el-option key="DBL"  label="德邦" value="DBL" />
+           </el-select>
+         </el-form-item>
+        <el-form-item label="物流单号" prop="deliveryId"  >
+          <el-input v-model="editDyForm.deliveryId" placeholder="请输入物流单号" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitEditDyForm">确 定</el-button>
+        <el-button @click="editDy.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="expressDialog.title" :visible.sync="expressDialog.open" width="600px" append-to-body>
+      <div  v-hasPermi="['store:storeOrder:syncExpress']"  >
+        <el-button size="mini" @click="syncExpress()" >同步快递鸟物流状态</el-button>
+      </div>
+      <el-table style="margin-top: 20px;width: 100%"
+                ref="orderHistoryTable"
+                :data="traces" border>
+        <el-table-column label="操作时间"  width="160" align="center">
+          <template slot-scope="scope">
+            {{scope.row.AcceptTime}}
+          </template>
+        </el-table-column>
+         <el-table-column label="位置" align="center">
+          <template slot-scope="scope">
+            {{scope.row.Location}}
+          </template>
+        </el-table-column>
+        <el-table-column label="描述" align="center">
+          <template slot-scope="scope">
+            {{scope.row.AcceptStation}}
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+
+    <el-dialog :title="erpDialog.title" :visible.sync="erpDialog.open" width="600px" append-to-body>
+      <div v-if="order!=null&&order.extendOrderId!=null&&order.status==1"  v-hasPermi="['store:storeOrder:updateExpress']"  >
+        <el-button size="mini" @click="updateExpress()" >同步物流发货</el-button>
+      </div>
+      <div class="table-layout"  v-if="erpOrder!=null">
+        <el-row>
+          <el-col :span="6" class="table-cell-title">订单编号</el-col>
+          <el-col :span="6" class="table-cell-title">是否代收</el-col>
+          <el-col :span="6" class="table-cell-title">快递编号</el-col>
+          <el-col :span="6" class="table-cell-title">快递名称</el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.code}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.cod?'是':'否'}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.express_code}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.express_name}}
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="6" class="table-cell-title">收货人</el-col>
+          <el-col :span="6" class="table-cell-title">电话</el-col>
+          <el-col :span="6" class="table-cell-title">地址</el-col>
+          <el-col :span="6" class="table-cell-title">运单号</el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.receiver_name}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.receiver_mobile}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.receiver_address}}
+          </el-col>
+          <el-col :span="6" class="table-cell">
+            {{erpOrder.deliverys!=null&&erpOrder.deliverys.length>0?erpOrder.deliverys[0].mail_no:''}}
+          </el-col>
+
+        </el-row>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import {auditPayRemain,addTuiMoney,syncExpress,updateExpress,getEroOrder,refundOrderMoney, editTuiMoney,getExpress,finishOrder,listStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportStoreOrder,updateDeliveryId, createErpOrder,updateErp,getStoreOrderAddress,getStoreOrderPhone} from "@/api/store/storeOrder";
+import { getTcmScheduleList } from "@/api/company/schedule";
+export default {
+  name: "order",
+  data() {
+    return {
+      dialogVisibleImage: false,
+      createTypeOptions:[],
+      deliveryStatusOptions:[],
+      deliveryTypeOptions:[],
+      scheduleOptions:[],
+      schedules:[],
+      orderId:null,
+      erpDialog:{
+        title:"ERP订单信息",
+        open:false,
+      },
+      expressDialog:{
+        title:"物流信息",
+        open:false,
+      },
+      edit:{
+        title:"",
+        open:false,
+      },
+      editDy:{
+        title:"修改物流单号",
+        open:false,
+      },
+      editDyForm:{
+        deliverySn:null,
+        deliveryId:null,
+      },
+      editForm:{
+        orderType:null,
+        status:null,
+        userAddress:null,
+        // extendOrderId:null,
+        scheduleId:null,
+        mark:"",
+      },
+
+      editDyRules:{
+        deliverySn: [
+          { required: true, message: "物流公司不能为空", trigger: "blur" }
+        ],
+        deliveryId: [
+          { required: true, message: "物流单号不能为空", trigger: "blur" }
+        ],
+      },
+      editRules:{
+        userAddress: [
+          { required: true, message: "收货地址不能为空", trigger: "blur" }
+        ],
+
+      },
+      orderTypeOptions:[],
+      payTypeOptions:[],
+      statusOptions:[],
+      certificates:null,
+      orderStatus:null,
+      order:null,
+      user:{},
+      logs:[],
+      items:[],
+      express:null,
+      traces:[],
+      payments:[],
+      tuiMoneyLogs:[],
+      erpOrder:null,
+      auditLogs: [],
+    };
+  },
+  created() {
+    this.getDicts("store_order_delivery_status").then((response) => {
+      this.deliveryStatusOptions = response.data;
+    });
+    this.getDicts("store_order_delivery_type").then((response) => {
+      this.deliveryTypeOptions = response.data;
+    });
+
+    this.getDicts("store_order_type").then((response) => {
+      this.orderTypeOptions = response.data;
+    });
+    this.getDicts("store_order_status").then((response) => {
+      this.statusOptions = response.data;
+    });
+    this.getDicts("store_pay_type").then((response) => {
+      this.payTypeOptions = response.data;
+    });
+    this.getDicts("store_order_create_type").then((response) => {
+      this.createTypeOptions = response.data;
+    });
+    getTcmScheduleList().then(response => {
+      this.scheduleOptions = response.data;
+    });
+  },
+  methods: {
+    handleAddress(){
+        const id = this.order.id;
+        getStoreOrderAddress(id).then(response =>{
+            this.order.userAddress = response.address;
+        })
+      },
+      handlePhone(){
+        const id = this.order.id;
+        getStoreOrderPhone(id).then(response =>{
+            this.order.userPhone = response.userPhone;
+        })
+      },
+    showImageDialog() {
+      this.dialogVisible = true;
+    },
+    syncExpress(){
+      var that=this;
+        this.$confirm('确定同步物流状态吗', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return syncExpress(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    updateErpOrder(){
+      var that=this;
+        this.$confirm('确定同步物流单号信息吗', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return updateErp(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+          this.editDy.open = false
+        }).catch(function() {});
+    },
+    updateExpress(){
+      var that=this;
+        this.$confirm('确定同步物流信息吗,同步后将自动发货', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return updateExpress(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    showErpOrder(){
+      this.erpDialog.open=true;
+      var data={extendOrderId:this.order.extendOrderId};
+      getEroOrder(data).then(response => {
+          this.erp = response.data;
+          if(response.data.orders!=null&&response.data.orders.length==1){
+            this.erpOrder=response.data.orders[0]
+          }
+          console.log(this.erpOrder)
+
+      });
+    },
+    showExpress(){
+      this.expressDialog.open=true;
+      getExpress(this.orderId).then(response => {
+          this.express = response.data;
+          if(this.express!=null&&this.express.Traces!=null){
+              this.traces=this.express.Traces
+          }
+
+      });
+
+    },
+    submitEditForm(){
+        this.$refs["editForm"].validate(valid => {
+        if (valid) {
+          updateStoreOrder(this.editForm).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("操作成功");
+              this.edit.open = false;
+              this.getOrder(this.order.id);
+            }
+          });
+
+        }
+      });
+    },
+    submitEditDyForm(){
+        this.$refs["editDyForm"].validate(valid => {
+        if (valid) {
+          updateDeliveryId(this.editDyForm).then(response => {
+            if (response.code === 200) {
+              this.msgSuccess("操作成功");
+              this.editDy.open = false;
+              this.getOrder(this.order.id);
+            }
+          });
+
+        }
+      });
+    },
+    editTuiMoney1(){
+      var that=this;
+        this.$confirm('是否冻结此订单推广佣金吗?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return editTuiMoney(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    editTuiMoney2(){
+      var that=this;
+        this.$confirm('是否解冻此订单推广佣金吗?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return editTuiMoney(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    addTuiMoney(){
+      var that=this;
+        this.$confirm('确定手动分佣金吗?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return addTuiMoney(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    refundOrderMoney(){
+        var that=this;
+        this.$confirm('确认退款吗', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return refundOrderMoney(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    finishOrder(){
+        var that=this;
+        this.$confirm('是否确认客户已收货?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return finishOrder(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    auditPayRemain(){
+        var that=this;
+        this.$confirm('是否确认已收尾款?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderId:that.order.id}
+          return auditPayRemain(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    editOrder(){
+        this.edit.open=true;
+        this.editForm.id=this.order.id;
+        this.editForm.mark=this.order.mark
+        this.editForm.orderType=this.order.orderType.toString();
+        this.editForm.status = this.order.status.toString();
+        this.editForm.userAddress = this.order.userAddress.toString();
+        this.editForm.scheduleId = this.order.scheduleId;
+        // this.editForm.extendOrderId = this.order.extendOrderId.toString();
+
+    },
+    //推送管易按钮
+    addErpOrder(){
+        var that=this;
+        this.$confirm('是否确认推送erp?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var data={orderCode:that.order.orderCode}
+          return createErpOrder(data);
+        }).then(() => {
+          this.msgSuccess("操作成功");
+          this.getOrder(this.order.id);
+        }).catch(function() {});
+    },
+    editDelivery(){
+      this.editDy.open = true;
+      this.editDyForm.id = this.order.id;
+      this.editDyForm.deliveryId = this.order.deliveryId;
+      this.editDyForm.deliverySn = this.order.deliverySn;
+    },
+    getOrder(orderId){
+        this.orderId=orderId;
+        this.certificates = null;
+        getStoreOrder(orderId).then(response => {
+            this.order = response.order;
+            if(response.order.certificates != null){
+              this.certificates = response.order.certificates;
+            }
+            if(response.order.status != null){
+              this.orderStatus = response.order.status;
+            }
+            this.user = response.user;
+            this.logs = response.logs;
+            this.items = response.items;
+            this.payments=response.payments;
+            this.tuiMoneyLogs=response.tuiMoneyLogs;
+            this.auditLogs = response.auditLogs;
+        });
+     }
+  }
+};
+</script>
+<style scoped>
+.order-content{
+  margin: 10px;
+
+}
+
+.operate-container {
+  background: #F2F6FC;
+  height: 60px;
+  margin: -20px -20px 0;
+  line-height: 60px;
+}
+
+.operate-button-container {
+  float: right;
+  margin-right: 20px
+}
+</style>

+ 102 - 0
src/api/hisStore/components/productSelect.vue

@@ -0,0 +1,102 @@
+<template>
+  <div class="product-select" >
+    <el-form   :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="商品名称" prop="productName">
+        <el-input
+          style="width:200px"
+          v-model="queryParams.productName"
+          placeholder="请输入商品名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table border v-loading="loading" :data="list">
+      <el-table-column label="商品ID" align="center" prop="productId" />
+      <el-table-column label="商品图片" align="center" width="100">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="scope.row.image" width="80">
+            <img :src="scope.row.image" style="max-width: 80px;">
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="商品名称" show-overflow-tooltip align="center" prop="productName" />
+      <el-table-column label="单价" align="center" prop="price" />
+      <el-table-column label="操作" align="center" width="100px" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleSelect(scope.row)"
+          >选择</el-button>
+        </template>
+      </el-table-column>
+    </el-table> 
+    <pagination
+      style="padding-bottom:10px;"
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { listStoreProduct } from "@/api/store/storeProduct";
+export default {
+  name: "selectProduct",
+  data() {
+    return {
+      loading: true,
+      list:[],
+      total: 0,
+      queryParams: {
+        productName:"",
+        pageNum: 1,
+        pageSize: 10,
+        isPackage:0,
+      }
+    };
+  },
+  created() {
+     this.getList();
+  },
+  methods: {
+    getData(){
+      this.getList();
+    },
+    handleSelect(row){
+      this.$emit('selectProduct',row);
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    getList(){
+      this.loading = true;
+      listStoreProduct(this.queryParams).then(response => {
+        this.list = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    }
+  }
+};
+</script>
+<style scoped>
+.product-select{
+  padding-bottom: 15px;
+}
+</style>

+ 111 - 0
src/api/hisStore/components/testReportDetails.vue

@@ -0,0 +1,111 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         测试报告详情
+      </div>
+  <div class="contentx" v-if="item!=null">
+        <div class="desct"> 测试报告信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="报告编号"><span v-if="item!=null">{{item.reportSn}}</span></el-descriptions-item>
+          <el-descriptions-item label="用户昵称"><span v-if="item!=null">{{item.nickName}}</span></el-descriptions-item>
+          <el-descriptions-item label="用户电话"><span v-if="item!=null">{{item.phone}}</span></el-descriptions-item>
+          <el-descriptions-item label="诊断结果"><span v-if="item!=null">{{item.testResult}}</span></el-descriptions-item>
+          <el-descriptions-item label="分数"><span v-if="item!=null">{{item.score}}</span></el-descriptions-item>
+          <el-descriptions-item label="模板"><span v-if="item!=null">{{item.name}}</span></el-descriptions-item>
+          <el-descriptions-item label="备注"><span v-if="item!=null">{{item.remark}}</span></el-descriptions-item>
+          <el-descriptions-item label="创建时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+        </el-descriptions>
+  </div>
+  <div class="contentx" v-if="patientJson!=null">
+        <div class="desct" > 患者信息</div>
+        <el-descriptions title="" :column="3" border >
+            <el-descriptions-item label="患者名称"><span >{{patientJson.name}}</span></el-descriptions-item>
+            <el-descriptions-item label="患者性别">
+              <dict-tag :options="sexOptions" :value="patientJson.sex"/>
+        </el-descriptions-item>
+            <el-descriptions-item label="患者年龄"><span >{{patientJson.age}}</span></el-descriptions-item>
+        </el-descriptions>
+  </div>
+  <div class="contentx" v-if="conditioningPlanJson!=null">
+        <div class="desct"> 调理方案</div>
+        <el-descriptions title="" :column="1" border >
+            <el-descriptions-item :label="form.name" v-for=" form in conditioningPlanJson" ><span >{{form.value}}</span></el-descriptions-item>
+        </el-descriptions>
+  </div>
+  <div class="contentx" v-if="formJson!=null">
+        <div class="desct"> 表单信息</div>
+        <el-descriptions title="" :column="3" border >
+            <el-descriptions-item :label="form.title" v-for=" form in formJson" ><span >{{form.option}}</span></el-descriptions-item>
+        </el-descriptions>
+  </div>
+</div>
+</template>
+
+<script>
+import { listTestReport, getTestReport, delTestReport, addTestReport, updateTestReport, exportTestReport } from "@/api/store/testReport";
+  export default {
+    name: "testReport",
+    props:["data"],
+    data() {
+      return {
+        item:null,
+        formJson:null,
+        conditioningPlanJson:null,
+        patientJson:null,
+        sexOptions:[],
+      }
+    },
+    created() {
+      this.getDicts("sys_patient_sex").then(response => {
+         this.sexOptions = response.data;
+       });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        this.conditioningPlanJson=null;
+        this.formJson=null;
+        this.patientJson=null;
+        getTestReport(orderId).then(response => {
+            this.item = response.data;
+            if(response.data){
+              if(response.data.formJson!=null){
+                this.formJson=JSON.parse(response.data.formJson);
+                console.log(this.formJson)
+              }
+              if(response.data.conditioningPlanJson!=null){
+                this.conditioningPlanJson=JSON.parse(response.data.conditioningPlanJson)
+              }
+              if(response.data.patientJson!=null){
+                this.patientJson=JSON.parse(response.data.patientJson)
+              }
+            }
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 500px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 108 - 0
src/api/hisStore/components/testTempDetails.vue

@@ -0,0 +1,108 @@
+<template>
+
+  <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+    <div style="padding: 20px; background-color: #fff;">
+      测一测模板详情
+    </div>
+
+<div class="content" v-if="item!=null">
+    <div class="desct">
+      测一测模板信息
+    </div>
+    <el-descriptions title="" :column="3" border>
+    <el-descriptions-item label="名称" >
+        <span v-if="item!=null">{{item.name}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="模板编号" >
+        <span v-if="item!=null">{{item.tempCode}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="状态" >
+         <dict-tag :options="statusOptions" :value="item.status"/>
+    </el-descriptions-item>
+
+    <el-descriptions-item label="创建时间" >
+        <span v-if="item!=null">{{item.createTime}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="修改时间" >
+        <span v-if="item!=null">{{item.updateTime}}</span>
+    </el-descriptions-item>
+    </el-descriptions>
+  </div>
+<div class="content" v-for="mb in itemTypeJson">
+    <div class="desct">
+      {{mb.itemType}}
+    </div>
+    <el-table :data="mb.item" :cell-style="{ textAlign: 'center' }" :header-cell-style="{textAlign: 'center'}" border>
+      <el-table-column label="名称" prop="name" width="200px">
+        <template slot-scope="scope">
+          {{ scope.row.name }}
+        </template>
+      </el-table-column>
+      <el-table-column label="内容" prop="value" >
+        <template slot-scope="scope">
+          <div style="white-space: pre-wrap;">
+            {{ scope.row.value }}
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+
+      </div>
+</template>
+
+<script>
+import { listTestTemp, getTestTemp, delTestTemp, addTestTemp, updateTestTemp, exportTestTemp } from "@/api/store/testTemp";
+  export default {
+    name: "testTempDetails",
+    props:["data"],
+    data() {
+      return {
+       // 状态字典
+       statusOptions: [],
+       itemTypeJson:[],
+        item:null,
+      }
+    },
+    created() {
+    this.getDicts("sys_company_status").then(response => {
+      this.statusOptions = response.data;
+    });
+
+    },
+    methods: {
+      getDetails(orderId) {
+          this.item=null;
+          getTestTemp(orderId).then(response => {
+              this.item = response.data;
+              this.itemTypeJson=  JSON.parse(this.item.itemTypeJson)
+          });
+      },
+
+    }
+  }
+</script>
+<style>
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .content{
+      height: 100%;
+      background-color: #fff;
+     padding: 0px 20px 20px;
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+</style>
+
+

+ 116 - 0
src/api/hisStore/components/testTempItemDetails.vue

@@ -0,0 +1,116 @@
+<template>
+
+  <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+    <div style="padding: 20px; background-color: #fff;">
+      测一测模板项目详情
+    </div>
+
+<div class="content" v-if="item!=null">
+    <div class="desct">
+      测一测模板项目信息
+    </div>
+    <el-descriptions title="" :column="3" border>
+    <el-descriptions-item label="标题" >
+        <span v-if="item!=null">{{item.title}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="模板名称" >
+        <span v-if="item!=null">{{name}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="项目类型" >
+         <dict-tag :options="itemTypeOptions" :value="item.tempId"/>
+    </el-descriptions-item>
+    <el-descriptions-item label="排序" >
+        <span v-if="item!=null">{{item.sort}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="创建时间" >
+        <span v-if="item!=null">{{item.createTime}}</span>
+    </el-descriptions-item>
+    <el-descriptions-item label="修改时间" >
+        <span v-if="item!=null">{{item.updateTime}}</span>
+    </el-descriptions-item>
+        </el-descriptions>
+            </div>
+            <div class="content" v-if="item!=null">
+<div class="desct">
+  详情
+</div>
+
+  <el-table :data="scoreJson" :cell-style="{ textAlign: 'center' }" :header-cell-style="{textAlign: 'center'}" border>
+    <el-table-column label="标题" prop="name" >
+      <template slot-scope="scope">
+        {{ scope.row.name }}
+      </template>
+    </el-table-column>
+    <el-table-column label="分值" prop="score" >
+      <template slot-scope="scope">
+        {{ scope.row.score }}
+      </template>
+    </el-table-column>
+  </el-table>
+
+
+      </div>
+
+      </div>
+</template>
+
+<script>
+import { listTestTempItem, getTestTempItem, delTestTempItem, addTestTempItem, updateTestTempItem, exportTestTempItem } from "@/api/store/testTempItem";
+import { getAllTestTemp } from "@/api/store/testTemp";
+  export default {
+    name: "patientdetails",
+    props:["data"],
+    data() {
+      return {
+       // 状态字典
+       itemTypeOptions: [],
+        item:null,
+        scoreJson:[],
+        TempList:[],
+        name:null,
+      }
+    },
+    created() {
+     this.getDicts("test_temp_item_type").then(response => {
+       this.itemTypeOptions = response.data;
+     });
+
+    },
+    methods: {
+
+      getDetails(orderId,name) {
+          this.name=name;
+          this.item=null;
+          getTestTempItem(orderId).then(response => {
+              this.item = response.data;
+              this.scoreJson=JSON.parse(response.data.scoreJson);
+          });
+      },
+
+    }
+  }
+</script>
+<style>
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .content{
+      height: 100%;
+      background-color: #fff;
+     padding: 0px 20px 20px;
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+</style>
+
+

+ 80 - 0
src/api/hisStore/components/vesselDetails.vue

@@ -0,0 +1,80 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         筋络详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 筋络信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="图片" >
+            <el-image
+                    style="width: 100px"
+                    :src="item.imgUrl"
+                    :preview-src-list="[item.imgUrl]">
+            </el-image>
+          </el-descriptions-item>
+          <el-descriptions-item label="请输入筋络穴位名称"><span v-if="item!=null">{{item.vesselName}}</span></el-descriptions-item>
+          <el-descriptions-item label="排序"><span v-if="item!=null">{{item.sort}}</span></el-descriptions-item>
+           <el-descriptions-item label="经络"><span v-if="item!=null">{{item.vessel}}</span></el-descriptions-item>
+          <el-descriptions-item label="部位"><span v-if="item!=null">{{item.region}}</span></el-descriptions-item>
+
+          <el-descriptions-item label="状态"><span v-if="item!=null"> <dict-tag :options="statusOptions" :value="item.status"/></span></el-descriptions-item>
+          <el-descriptions-item label="创建时间"><span v-if="item!=null">{{item.createTime}}</span></el-descriptions-item>
+          <el-descriptions-item label="描述"><span  v-if="item!=null" v-html="item.descs" ></span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+
+
+    </div>
+</template>
+
+<script>
+import { listVessel, getVessel, delVessel, addVessel, updateVessel, exportVessel } from "@/api/store/vessel";
+  export default {
+    name: "getVessel",
+    data() {
+      return {
+        item:null,
+        // 状态字典
+        statusOptions: [],
+      }
+    },
+    created() {
+      this.getDicts("sys_company_status").then(response => {
+        this.statusOptions = response.data;
+      });
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getVessel(orderId).then(response => {
+            this.item = response.data;
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+
+
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 53 - 0
src/api/hisStore/department.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询科室列表
+export function listDepartment(query) {
+  return request({
+    url: '/his/department/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询科室详细
+export function getDepartment(deptId) {
+  return request({
+    url: '/his/department/' + deptId,
+    method: 'get'
+  })
+}
+
+// 新增科室
+export function addDepartment(data) {
+  return request({
+    url: '/his/department',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改科室
+export function updateDepartment(data) {
+  return request({
+    url: '/his/department',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除科室
+export function delDepartment(deptId) {
+  return request({
+    url: '/his/department/' + deptId,
+    method: 'delete'
+  })
+}
+
+// 导出科室
+export function exportDepartment(query) {
+  return request({
+    url: '/his/department/export',
+    method: 'get',
+    params: query
+  })
+}

+ 60 - 0
src/api/hisStore/disease.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询疾病列表
+export function listDisease(query) {
+  return request({
+    url: '/his/disease/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询疾病详细
+export function getDisease(diseaseId) {
+  return request({
+    url: '/his/disease/' + diseaseId,
+    method: 'get'
+  })
+}
+// 查询科室列表
+export function listDepartment(query) {
+  return request({
+    url: '/his/department/listOptions',
+    method: 'get',
+    params: query
+  })
+}
+// 新增疾病
+export function addDisease(data) {
+  return request({
+    url: '/his/disease',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改疾病
+export function updateDisease(data) {
+  return request({
+    url: '/his/disease',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除疾病
+export function delDisease(diseaseId) {
+  return request({
+    url: '/his/disease/' + diseaseId,
+    method: 'delete'
+  })
+}
+
+// 导出疾病
+export function exportDisease(query) {
+  return request({
+    url: '/his/disease/export',
+    method: 'get',
+    params: query
+  })
+}

+ 62 - 0
src/api/hisStore/doctorArticle.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询医生文章列表
+export function listArticle(query) {
+  return request({
+    url: '/his/doctorArticle/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询医生名称列表
+export function listdocuser(query) {
+  return request({
+    url: '/his/doctor/userdoc/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询医生文章详细
+export function getArticle(articleId) {
+  return request({
+    url: '/his/doctorArticle/' + articleId,
+    method: 'get'
+  })
+}
+
+// 新增医生文章
+export function addArticle(data) {
+  return request({
+    url: '/his/doctorArticle',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改医生文章
+export function updateArticle(data) {
+  return request({
+    url: '/his/doctorArticle',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除医生文章
+export function delArticle(articleId) {
+  return request({
+    url: '/his/doctorArticle/' + articleId,
+    method: 'delete'
+  })
+}
+
+// 导出医生文章
+export function exportArticle(query) {
+  return request({
+    url: '/his/doctorArticle/export',
+    method: 'get',
+    params: query
+  })
+}

+ 59 - 0
src/api/hisStore/famousPrescribe.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 查询经典名方列表
+export function listFamousPrescribe(query) {
+  return request({
+    url: '/his/famousPrescribe/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询经典名方详细
+export function getFamousPrescribe(id) {
+  return request({
+    url: '/his/famousPrescribe/' + id,
+    method: 'get'
+  })
+}
+// 下载导入模板
+export function importTemplate() {
+  return request({
+    url: '/his/chineseMedicine/importTemplate',
+    method: 'get'
+  })
+}
+// 新增经典名方
+export function addFamousPrescribe(data) {
+  return request({
+    url: '/his/famousPrescribe',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改经典名方
+export function updateFamousPrescribe(data) {
+  return request({
+    url: '/his/famousPrescribe',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除经典名方
+export function delFamousPrescribe(id) {
+  return request({
+    url: '/his/famousPrescribe/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出经典名方
+export function exportFamousPrescribe(query) {
+  return request({
+    url: '/his/famousPrescribe/export',
+    method: 'get',
+    params: query
+  })
+}

+ 60 - 0
src/api/hisStore/illnessLibrary.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询中医疾病列表
+export function listillnessLibrary(query) {
+  return request({
+    url: '/his/illnessLibrary/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询中医疾病详细
+export function getillnessLibrary(illnessId) {
+  return request({
+    url: '/his/illnessLibrary/' + illnessId,
+    method: 'get'
+  })
+}
+export function getIllness(query) {
+  return request({
+    url: '/his/illnessLibrary/getIllness/',
+    method: 'get',
+    params: query
+  })
+}
+
+// 新增中医疾病
+export function addillnessLibrary(data) {
+  return request({
+    url: '/his/illnessLibrary',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改中医疾病
+export function updateillnessLibrary(data) {
+  return request({
+    url: '/his/illnessLibrary',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除中医疾病
+export function delillnessLibrary(illnessId) {
+  return request({
+    url: '/his/illnessLibrary/' + illnessId,
+    method: 'delete'
+  })
+}
+
+// 导出中医疾病
+export function exportillnessLibrary(query) {
+  return request({
+    url: '/his/illnessLibrary/export',
+    method: 'get',
+    params: query
+  })
+}

+ 58 - 0
src/api/hisStore/integralGoods.js

@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+
+// 查询积分商品列表
+export function listIntegralGoods(query) {
+  return request({
+    url: '/his/integralGoods/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询积分商品详细
+export function getIntegralGoods(goodsId) {
+  return request({
+    url: '/his/integralGoods/' + goodsId,
+    method: 'get'
+  })
+}
+export function importTemplate() {
+  return request({
+    url: '/his/integralGoods/importTemplate',
+    method: 'get'
+  })
+}
+// 新增积分商品
+export function addIntegralGoods(data) {
+  return request({
+    url: '/his/integralGoods',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改积分商品
+export function updateIntegralGoods(data) {
+  return request({
+    url: '/his/integralGoods',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除积分商品
+export function delIntegralGoods(goodsId) {
+  return request({
+    url: '/his/integralGoods/' + goodsId,
+    method: 'delete'
+  })
+}
+
+// 导出积分商品
+export function exportIntegralGoods(query) {
+  return request({
+    url: '/his/integralGoods/export',
+    method: 'get',
+    params: query
+  })
+}

+ 80 - 0
src/api/hisStore/integralOrder.js

@@ -0,0 +1,80 @@
+import request from '@/utils/request'
+
+// 查询积分商品订单列表
+export function listIntegralOrder(query) {
+  return request({
+    url: '/his/integralOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询积分商品订单详细
+export function getIntegralOrder(orderId) {
+  return request({
+    url: '/his/integralOrder/' + orderId,
+    method: 'get'
+  })
+}
+export function getExpress(orderId) {
+  return request({
+    url: '/his/integralOrder/getExpress/' + orderId,
+    method: 'get'
+  })
+}
+export function importTemplate() {
+  return request({
+    url: '/his/integralOrder/importTemplate',
+    method: 'get'
+  })
+}
+export function sendgoods(data) {
+  return request({
+    url: '/his/integralOrder/sendGoods',
+    method: 'put',
+    data: data
+  })
+}
+// 新增积分商品订单
+export function addIntegralOrder(data) {
+  return request({
+    url: '/his/integralOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改积分商品订单
+export function updateIntegralOrder(data) {
+  return request({
+    url: '/his/integralOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除积分商品订单
+export function delIntegralOrder(orderId) {
+  return request({
+    url: '/his/integralOrder/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出积分商品订单
+export function exportIntegralOrder(query) {
+  return request({
+    url: '/his/integralOrder/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询收货人电话
+export function getOrderUserPhone(orderId) {
+  return request({
+    url: '/his/integralOrder/queryPhone/' + orderId,
+    method: 'get'
+  })
+}

+ 60 - 0
src/api/hisStore/medicatedFood.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询药膳食疗列表
+export function listMedicatedFood(query) {
+  return request({
+    url: '/his/medicatedFood/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 下载导入模板
+export function importTemplate() {
+  return request({
+    url: '/his/medicatedFood/importTemplate',
+    method: 'get'
+  })
+}
+// 查询药膳食疗详细
+export function getMedicatedFood(id) {
+  return request({
+    url: '/his/medicatedFood/' + id,
+    method: 'get'
+  })
+}
+
+// 新增药膳食疗
+export function addMedicatedFood(data) {
+  return request({
+    url: '/his/medicatedFood',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改药膳食疗
+export function updateMedicatedFood(data) {
+  return request({
+    url: '/his/medicatedFood',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除药膳食疗
+export function delMedicatedFood(id) {
+  return request({
+    url: '/his/medicatedFood/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出药膳食疗
+export function exportMedicatedFood(query) {
+  return request({
+    url: '/his/medicatedFood/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/menu.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询用户端菜单管理列表
+export function listMenu(query) {
+  return request({
+    url: '/store/store/menu/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户端菜单管理详细
+export function getMenu(menuId) {
+  return request({
+    url: '/store/store/menu/' + menuId,
+    method: 'get'
+  })
+}
+
+// 新增用户端菜单管理
+export function addMenu(data) {
+  return request({
+    url: '/store/store/menu',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户端菜单管理
+export function updateMenu(data) {
+  return request({
+    url: '/store/store/menu',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户端菜单管理
+export function delMenu(menuId) {
+  return request({
+    url: '/store/store/menu/' + menuId,
+    method: 'delete'
+  })
+}
+
+// 导出用户端菜单管理
+export function exportMenu(query) {
+  return request({
+    url: '/store/store/menu/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/prescribe.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询处方列表
+export function listPrescribe(query) {
+  return request({
+    url: '/store/prescribe/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询处方详细
+export function getPrescribe(prescribeId) {
+  return request({
+    url: '/store/prescribe/' + prescribeId,
+    method: 'get'
+  })
+}
+
+// 新增处方
+export function addPrescribe(data) {
+  return request({
+    url: '/store/prescribe',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改处方
+export function updatePrescribe(data) {
+  return request({
+    url: '/store/prescribe',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除处方
+export function delPrescribe(prescribeId) {
+  return request({
+    url: '/store/prescribe/' + prescribeId,
+    method: 'delete'
+  })
+}
+
+// 导出处方
+export function exportPrescribe(query) {
+  return request({
+    url: '/store/prescribe/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/prescribeDrug.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询处方药品列表
+export function listPrescribeDrug(query) {
+  return request({
+    url: '/store/prescribeDrug/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询处方药品详细
+export function getPrescribeDrug(drugId) {
+  return request({
+    url: '/store/prescribeDrug/' + drugId,
+    method: 'get'
+  })
+}
+
+// 新增处方药品
+export function addPrescribeDrug(data) {
+  return request({
+    url: '/store/prescribeDrug',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改处方药品
+export function updatePrescribeDrug(data) {
+  return request({
+    url: '/store/prescribeDrug',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除处方药品
+export function delPrescribeDrug(drugId) {
+  return request({
+    url: '/store/prescribeDrug/' + drugId,
+    method: 'delete'
+  })
+}
+
+// 导出处方药品
+export function exportPrescribeDrug(query) {
+  return request({
+    url: '/store/prescribeDrug/export',
+    method: 'get',
+    params: query
+  })
+}

+ 59 - 0
src/api/hisStore/shippingTemplates.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 查询运费模板列表
+export function listShippingTemplates(query) {
+  return request({
+    url: '/store/shippingTemplates/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运费模板详细
+export function getShippingTemplates(shippingId) {
+  return request({
+    url: '/store/shippingTemplates/' + shippingId,
+    method: 'get'
+  })
+}
+
+// 新增运费模板
+export function addShippingTemplates(data) {
+  return request({
+    url: '/store/shippingTemplates',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运费模板
+export function updateShippingTemplates(data) {
+  return request({
+    url: '/store/shippingTemplates',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运费模板
+export function delShippingTemplates(shippingId) {
+  return request({
+    url: '/store/shippingTemplates/' + shippingId,
+    method: 'delete'
+  })
+}
+
+// 导出运费模板
+export function exportShippingTemplates(query) {
+  return request({
+    url: '/store/shippingTemplates/export',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllShippingTemplates() {
+  return request({
+    url: '/store/shippingTemplates/getAllList',
+    method: 'get'
+  })
+}

+ 53 - 0
src/api/hisStore/storeActivity.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询活动列表
+export function listStoreActivity(query) {
+  return request({
+    url: '/store/storeActivity/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询活动详细
+export function getStoreActivity(activityId) {
+  return request({
+    url: '/store/storeActivity/' + activityId,
+    method: 'get'
+  })
+}
+
+// 新增活动
+export function addStoreActivity(data) {
+  return request({
+    url: '/store/storeActivity',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改活动
+export function updateStoreActivity(data) {
+  return request({
+    url: '/store/storeActivity',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除活动
+export function delStoreActivity(activityId) {
+  return request({
+    url: '/store/storeActivity/' + activityId,
+    method: 'delete'
+  })
+}
+
+// 导出活动
+export function exportStoreActivity(query) {
+  return request({
+    url: '/store/storeActivity/export',
+    method: 'get',
+    params: query
+  })
+}

+ 87 - 0
src/api/hisStore/storeAfterSales.js

@@ -0,0 +1,87 @@
+import request from '@/utils/request'
+
+// 查询售后记录列表
+export function listStoreAfterSales(query) {
+  return request({
+    url: '/store/storeAfterSales/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询售后记录详细
+export function getStoreAfterSales(id) {
+  return request({
+    url: '/store/storeAfterSales/' + id,
+    method: 'get'
+  })
+}
+
+// 新增售后记录
+export function addStoreAfterSales(data) {
+  return request({
+    url: '/store/storeAfterSales',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改售后记录
+export function updateStoreAfterSales(data) {
+  return request({
+    url: '/store/storeAfterSales',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除售后记录
+export function delStoreAfterSales(id) {
+  return request({
+    url: '/store/storeAfterSales/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出售后记录
+export function exportStoreAfterSales(query) {
+  return request({
+    url: '/store/storeAfterSales/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+export function cancel(data) {
+  return request({
+    url: '/store/storeAfterSales/cancel',
+    method: 'post',
+    data: data
+  })
+}
+
+export function refund(data) {
+  return request({
+    url: '/store/storeAfterSales/refund',
+    method: 'post',
+    data: data
+  })
+}
+
+export function audit1(data) {
+  return request({
+    url: '/store/storeAfterSales/audit1',
+    method: 'post',
+    data: data
+  })
+}
+export function audit2(data) {
+  return request({
+    url: '/store/storeAfterSales/audit2',
+    method: 'post',
+    data: data
+  })
+}
+

+ 53 - 0
src/api/hisStore/storeAfterSalesItem.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询售后子列表
+export function listStoreAfterSalesItem(query) {
+  return request({
+    url: '/store/storeAfterSalesItem/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询售后子详细
+export function getStoreAfterSalesItem(id) {
+  return request({
+    url: '/store/storeAfterSalesItem/' + id,
+    method: 'get'
+  })
+}
+
+// 新增售后子
+export function addStoreAfterSalesItem(data) {
+  return request({
+    url: '/store/storeAfterSalesItem',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改售后子
+export function updateStoreAfterSalesItem(data) {
+  return request({
+    url: '/store/storeAfterSalesItem',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除售后子
+export function delStoreAfterSalesItem(id) {
+  return request({
+    url: '/store/storeAfterSalesItem/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出售后子
+export function exportStoreAfterSalesItem(query) {
+  return request({
+    url: '/store/storeAfterSalesItem/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeAfterSalesStatus.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询售后订单操作列表
+export function listStoreAfterSalesStatus(query) {
+  return request({
+    url: '/store/storeAfterSalesStatus/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询售后订单操作详细
+export function getStoreAfterSalesStatus(id) {
+  return request({
+    url: '/store/storeAfterSalesStatus/' + id,
+    method: 'get'
+  })
+}
+
+// 新增售后订单操作
+export function addStoreAfterSalesStatus(data) {
+  return request({
+    url: '/store/storeAfterSalesStatus',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改售后订单操作
+export function updateStoreAfterSalesStatus(data) {
+  return request({
+    url: '/store/storeAfterSalesStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除售后订单操作
+export function delStoreAfterSalesStatus(id) {
+  return request({
+    url: '/store/storeAfterSalesStatus/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出售后订单操作
+export function exportStoreAfterSalesStatus(query) {
+  return request({
+    url: '/store/storeAfterSalesStatus/export',
+    method: 'get',
+    params: query
+  })
+}

+ 21 - 0
src/api/hisStore/storeCanvas.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+
+ 
+
+// 查询画布信息详细
+export function getStoreCanvas(canvasId) {
+  return request({
+    url: '/store/storeCanvas/' + canvasId,
+    method: 'get'
+  })
+}
+ 
+// 修改画布信息
+export function updateStoreCanvas(data) {
+  return request({
+    url: '/store/storeCanvas',
+    method: 'put',
+    data: data
+  })
+}
+ 

+ 53 - 0
src/api/hisStore/storeCart.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询购物车列表
+export function listStoreCart(query) {
+  return request({
+    url: '/store/storeCart/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询购物车详细
+export function getStoreCart(id) {
+  return request({
+    url: '/store/storeCart/' + id,
+    method: 'get'
+  })
+}
+
+// 新增购物车
+export function addStoreCart(data) {
+  return request({
+    url: '/store/storeCart',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改购物车
+export function updateStoreCart(data) {
+  return request({
+    url: '/store/storeCart',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除购物车
+export function delStoreCart(id) {
+  return request({
+    url: '/store/storeCart/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出购物车
+export function exportStoreCart(query) {
+  return request({
+    url: '/store/storeCart/export',
+    method: 'get',
+    params: query
+  })
+}

+ 70 - 0
src/api/hisStore/storeCoupon.js

@@ -0,0 +1,70 @@
+import request from '@/utils/request'
+
+// 查询优惠券列表
+export function listStoreCoupon(query) {
+  return request({
+    url: '/store/storeCoupon/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询优惠券详细
+export function getStoreCoupon(couponId) {
+  return request({
+    url: '/store/storeCoupon/' + couponId,
+    method: 'get'
+  })
+}
+
+// 新增优惠券
+export function addStoreCoupon(data) {
+  return request({
+    url: '/store/storeCoupon',
+    method: 'post',
+    data: data
+  })
+}
+export function publishCoupon(data) {
+  return request({
+    url: '/store/storeCoupon/publish',
+    method: 'post',
+    data: data
+  })
+}
+
+export function batchPublishCoupon(data) {
+  return request({
+    url: '/store/storeCoupon/batchPublish',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+// 修改优惠券
+export function updateStoreCoupon(data) {
+  return request({
+    url: '/store/storeCoupon',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除优惠券
+export function delStoreCoupon(couponId) {
+  return request({
+    url: '/store/storeCoupon/' + couponId,
+    method: 'delete'
+  })
+}
+
+// 导出优惠券
+export function exportStoreCoupon(query) {
+  return request({
+    url: '/store/storeCoupon/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeCouponIssue.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询优惠券领取列表
+export function listStoreCouponIssue(query) {
+  return request({
+    url: '/store/storeCouponIssue/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询优惠券领取详细
+export function getStoreCouponIssue(id) {
+  return request({
+    url: '/store/storeCouponIssue/' + id,
+    method: 'get'
+  })
+}
+
+// 新增优惠券领取
+export function addStoreCouponIssue(data) {
+  return request({
+    url: '/store/storeCouponIssue',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改优惠券领取
+export function updateStoreCouponIssue(data) {
+  return request({
+    url: '/store/storeCouponIssue',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除优惠券领取
+export function delStoreCouponIssue(id) {
+  return request({
+    url: '/store/storeCouponIssue/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出优惠券领取
+export function exportStoreCouponIssue(query) {
+  return request({
+    url: '/store/storeCouponIssue/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeCouponIssueUser.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询优惠券用户领取记录列表
+export function listStoreCouponIssueUser(query) {
+  return request({
+    url: '/store/storeCouponIssueUser/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询优惠券用户领取记录详细
+export function getStoreCouponIssueUser(id) {
+  return request({
+    url: '/store/storeCouponIssueUser/' + id,
+    method: 'get'
+  })
+}
+
+// 新增优惠券用户领取记录
+export function addStoreCouponIssueUser(data) {
+  return request({
+    url: '/store/storeCouponIssueUser',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改优惠券用户领取记录
+export function updateStoreCouponIssueUser(data) {
+  return request({
+    url: '/store/storeCouponIssueUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除优惠券用户领取记录
+export function delStoreCouponIssueUser(id) {
+  return request({
+    url: '/store/storeCouponIssueUser/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出优惠券用户领取记录
+export function exportStoreCouponIssueUser(query) {
+  return request({
+    url: '/store/storeCouponIssueUser/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeCouponUser.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询优惠券发放记录列表
+export function listStoreCouponUser(query) {
+  return request({
+    url: '/store/storeCouponUser/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询优惠券发放记录详细
+export function getStoreCouponUser(id) {
+  return request({
+    url: '/store/storeCouponUser/' + id,
+    method: 'get'
+  })
+}
+
+// 新增优惠券发放记录
+export function addStoreCouponUser(data) {
+  return request({
+    url: '/store/storeCouponUser',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改优惠券发放记录
+export function updateStoreCouponUser(data) {
+  return request({
+    url: '/store/storeCouponUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除优惠券发放记录
+export function delStoreCouponUser(id) {
+  return request({
+    url: '/store/storeCouponUser/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出优惠券发放记录
+export function exportStoreCouponUser(query) {
+  return request({
+    url: '/store/storeCouponUser/export',
+    method: 'get',
+    params: query
+  })
+}

+ 287 - 0
src/api/hisStore/storeOrder.js

@@ -0,0 +1,287 @@
+import request from '@/utils/request'
+
+// 查询订单列表
+export function listStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单明细总数
+export function getOrderItemsNum(query) {
+  return request({
+    url: '/store/storeOrder/orderItemsNum',
+    method: 'get',
+    params: query
+  })
+}
+// 查询尾款订单列表
+export function listPayRemainOrder(query) {
+  return request({
+    url: '/store/storeOrder/payRemainList',
+    method: 'get',
+    params: query
+  })
+}
+// 查询推广订单列表
+export function listPromotionOrder(query) {
+  return request({
+    url: '/store/storeOrder/promotionList',
+    method: 'get',
+    params: query
+  })
+}
+// 查询健康商城订单列表
+export function listHealthStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/healthList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCustomerOrderList(query) {
+  return request({
+    url: '/store/storeOrder/getCustomerOrderList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+// 查询订单详细
+export function getStoreOrder(id) {
+  return request({
+    url: '/store/storeOrder/' + id,
+    method: 'get'
+  })
+}
+
+// 查询订单详细
+export function getStoreOrderAddress(id) {
+  return request({
+    url: '/store/storeOrder/queryAddress/' + id,
+    method: 'get'
+  })
+}
+
+// 查询订单详细
+export function getStoreOrderPhone(id) {
+  return request({
+    url: '/store/storeOrder/queryPhone/' + id,
+    method: 'get'
+  })
+}
+
+
+export function getExpress(id) {
+  return request({
+    url: '/store/storeOrder/getExpress/' + id,
+    method: 'get'
+  })
+}
+
+// 新增订单
+export function addStoreOrder(data) {
+  return request({
+    url: '/store/storeOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单
+export function updateStoreOrder(data) {
+  return request({
+    url: '/store/storeOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 修改物流编号
+export function updateDeliveryId(data) {
+  return request({
+    url: '/store/storeOrder/editDeliveryId',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单
+export function delStoreOrder(id) {
+  return request({
+    url: '/store/storeOrder/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出订单
+export function exportStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单
+export function exportHealthStoreOrder(query) {
+  return request({
+    url: '/store/storeOrder/healthExport',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单
+export function exportPromotionOrder(query) {
+  return request({
+    url: '/store/storeOrder/promotionExport',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出付尾款订单
+export function exportStorePayRemainOrder(query) {
+  return request({
+    url: '/store/storeOrder/payRemainExport',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单
+export function exportStoreOrderItems(query) {
+  return request({
+    url: '/store/storeOrder/exportItems',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单
+export function exportHealthStoreOrderItems(query) {
+  return request({
+    url: '/store/storeOrder/healthExportItems',
+    method: 'get',
+    params: query
+  })
+}
+
+export function createUserOrder(data) {
+  return request({
+    url: '/store/storeOrder/createUserOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+export function finishOrder(data) {
+  return request({
+    url: '/store/storeOrder/finishOrder',
+    method: 'post',
+    data: data
+  })
+}
+export function importTemplate() {
+  return request({
+    url: '/store/storeOrder/importTemplate',
+    method: 'get'
+  })
+}
+
+export function editTuiMoney(data) {
+  return request({
+    url: '/store/storeOrder/editTuiMoney',
+    method: 'post',
+    data: data
+  })
+}
+
+export function refundOrderMoney(data) {
+  return request({
+    url: '/store/storeOrder/refundOrderMoney',
+    method: 'post',
+    data: data
+  })
+}
+
+export function updateExpress(data) {
+  return request({
+    url: '/store/storeOrder/updateExpress',
+    method: 'post',
+    data: data
+  })
+}
+export function syncExpress(data) {
+  return request({
+    url: '/store/storeOrder/syncExpress',
+    method: 'post',
+    data: data
+  })
+}
+
+export function updateErp(data) {
+  return request({
+    url: '/store/storeOrder/updateErpOrder',
+    method: 'post',
+    data: data
+  })
+}
+export function addTuiMoney(data) {
+  return request({
+    url: '/store/storeOrder/addTuiMoney',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getEroOrder(query) {
+  return request({
+    url: '/store/storeOrder/getEroOrder',
+    method: 'get',
+    params: query
+  })
+}
+
+export function createErpOrder(query) {
+  return request({
+    url: '/store/storeOrder/createErpOrder',
+    method: 'get',
+    params: query
+  })
+}
+
+//审核
+export function auditPayRemain(data) {
+  return request({
+    url: '/store/storeOrder/auditPayRemain',
+    method: 'post',
+    data: data
+  })
+}
+
+// 订单维度分页查询接口
+export function orderDimensionStatisticsList(query) {
+  return request({
+    url: '/store/storeOrder/orderDimensionStatisticsList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单维度统计接口
+export function orderDimensionStatisticsExport(query) {
+  return request({
+    url: '/store/storeOrder/orderDimensionStatisticsExport',
+    method: 'get',
+    params: query
+  })
+}

+ 19 - 0
src/api/hisStore/storeOrderAudit.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取审核列表
+export const list = (query) => {
+  return request({
+    url: '/store/storeOrderAudit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 审核
+export const audit = (data) => {
+  return request({
+    url: '/store/storeOrderAudit/audit',
+    method: 'post',
+    data: data
+  })
+}

+ 53 - 0
src/api/hisStore/storeOrderItem.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询订单详情列表
+export function listStoreOrderItem(query) {
+  return request({
+    url: '/store/storeOrderItem/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单详情详细
+export function getStoreOrderItem(itemId) {
+  return request({
+    url: '/store/storeOrderItem/' + itemId,
+    method: 'get'
+  })
+}
+
+// 新增订单详情
+export function addStoreOrderItem(data) {
+  return request({
+    url: '/store/storeOrderItem',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单详情
+export function updateStoreOrderItem(data) {
+  return request({
+    url: '/store/storeOrderItem',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单详情
+export function delStoreOrderItem(itemId) {
+  return request({
+    url: '/store/storeOrderItem/' + itemId,
+    method: 'delete'
+  })
+}
+
+// 导出订单详情
+export function exportStoreOrderItem(query) {
+  return request({
+    url: '/store/storeOrderItem/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeOrderNotice.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询订单通知用户 接收订单通知的用户列表
+export function listStoreOrderNotice(query) {
+  return request({
+    url: '/store/storeOrderNotice/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单通知用户 接收订单通知的用户详细
+export function getStoreOrderNotice(id) {
+  return request({
+    url: '/store/storeOrderNotice/' + id,
+    method: 'get'
+  })
+}
+
+// 新增订单通知用户 接收订单通知的用户
+export function addStoreOrderNotice(data) {
+  return request({
+    url: '/store/storeOrderNotice',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单通知用户 接收订单通知的用户
+export function updateStoreOrderNotice(data) {
+  return request({
+    url: '/store/storeOrderNotice',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单通知用户 接收订单通知的用户
+export function delStoreOrderNotice(id) {
+  return request({
+    url: '/store/storeOrderNotice/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出订单通知用户 接收订单通知的用户
+export function exportStoreOrderNotice(query) {
+  return request({
+    url: '/store/storeOrderNotice/export',
+    method: 'get',
+    params: query
+  })
+}

+ 69 - 0
src/api/hisStore/storeOrderOffline.js

@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// 查询线下订单列表
+export function listStoreOrderOffline(query) {
+  return request({
+    url: '/store/storeOrderOffline/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询线下订单详细
+export function getStoreOrderOffline(orderId) {
+  return request({
+    url: '/store/storeOrderOffline/' + orderId,
+    method: 'get'
+  })
+}
+//查看电话
+export function getPhone(orderId) {
+  return request({
+    url: '/store/storeOrderOffline/queryPhone/' + orderId,
+    method: 'get'
+  })
+}
+
+// 新增线下订单
+export function addStoreOrderOffline(data) {
+  return request({
+    url: '/store/storeOrderOffline',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改线下订单
+export function updateStoreOrderOffline(data) {
+  return request({
+    url: '/store/storeOrderOffline',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除线下订单
+export function delStoreOrderOffline(orderId) {
+  return request({
+    url: '/store/storeOrderOffline/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出线下订单
+export function exportStoreOrderOffline(query) {
+  return request({
+    url: '/store/storeOrderOffline/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+//审核订单
+export function auditOrder(orderId) {
+  return request({
+    url: '/store/storeOrderOffline/auditOrder/' + orderId,
+    method: 'post',
+  })
+}

+ 53 - 0
src/api/hisStore/storeOrderStatus.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询订单操作记录列表
+export function listStoreOrderStatus(query) {
+  return request({
+    url: '/store/storeOrderStatus/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单操作记录详细
+export function getStoreOrderStatus(id) {
+  return request({
+    url: '/store/storeOrderStatus/' + id,
+    method: 'get'
+  })
+}
+
+// 新增订单操作记录
+export function addStoreOrderStatus(data) {
+  return request({
+    url: '/store/storeOrderStatus',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单操作记录
+export function updateStoreOrderStatus(data) {
+  return request({
+    url: '/store/storeOrderStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单操作记录
+export function delStoreOrderStatus(id) {
+  return request({
+    url: '/store/storeOrderStatus/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出订单操作记录
+export function exportStoreOrderStatus(query) {
+  return request({
+    url: '/store/storeOrderStatus/export',
+    method: 'get',
+    params: query
+  })
+}

+ 78 - 0
src/api/hisStore/storePayment.js

@@ -0,0 +1,78 @@
+import request from '@/utils/request'
+
+// 查询支付明细列表
+export function listStorePayment(query,refundDateRange) {
+    if (null != refundDateRange && '' != refundDateRange) {
+      query.refundBeginTime = refundDateRange[0];
+      query.refundEndTime = refundDateRange[1];
+    }else{
+      query.refundBeginTime =null;
+      query.refundEndTime =null;
+    }
+    return request({
+      url: '/store/storePayment/list',
+      method: 'get',
+      params: query
+    })
+}
+
+// 查询支付明细详细
+export function getStorePayment(paymentId) {
+  return request({
+    url: '/store/storePayment/' + paymentId,
+    method: 'get'
+  })
+}
+
+// 新增支付明细
+export function addStorePayment(data) {
+  return request({
+    url: '/store/storePayment',
+    method: 'post',
+    data: data
+  })
+}
+
+export function refundStorePayment(data) {
+  return request({
+    url: '/store/storePayment/refundStorePayment',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 修改支付明细
+export function updateStorePayment(data) {
+  return request({
+    url: '/store/storePayment',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除支付明细
+export function delStorePayment(paymentId) {
+  return request({
+    url: '/store/storePayment/' + paymentId,
+    method: 'delete'
+  })
+}
+
+// 导出支付明细
+export function exportStorePayment(query) {
+  return request({
+    url: '/store/storePayment/export',
+    method: 'get',
+    params: query
+  })
+}
+
+//同步订单状态
+export function setPayNotify(data) {
+  return request({
+    url: '/store/storePayment/returnPayStatus',
+    method: 'post',
+    data: data
+  })
+}

+ 96 - 0
src/api/hisStore/storeProduct.js

@@ -0,0 +1,96 @@
+import request from '@/utils/request'
+
+// 查询商品列表
+export function listStoreProduct(query) {
+  return request({
+    url: '/store/storeProduct/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function batchModify(param) {
+  return request({
+    url: '/store/storeProduct/batchModify',
+    method: 'post',
+    data: param
+  })
+}
+
+// 查询商品详细
+export function getStoreProduct(productId) {
+  return request({
+    url: '/store/storeProduct/' + productId,
+    method: 'get'
+  })
+}
+
+
+export function addOrEdit(data) {
+  return request({
+    url: '/store/storeProduct/addOrEdit',
+    method: 'post',
+    data: data
+  })
+}
+
+export function importTemplate() {
+  return request({
+    url: '/store/storeProduct/importTemplate',
+    method: 'get'
+  })
+}
+
+
+// 删除商品
+export function delStoreProduct(productId) {
+  return request({
+    url: '/store/storeProduct/' + productId,
+    method: 'delete'
+  })
+}
+
+// 导出商品
+export function exportStoreProduct(query) {
+  return request({
+    url: '/store/storeProduct/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function genFormatAttr(productId,json) {
+  return request({
+    url: '/store/storeProduct/genFormatAttr/'+productId,
+    method: 'post',
+    data: json
+  })
+}
+
+
+export function getStoreProductAttrValueList(query) {
+  return request({
+    url: '/store/storeProduct/getStoreProductAttrValueList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getStoreTuiProductAttrValueList(query) {
+  return request({
+    url: '/store/storeProduct/getStoreTuiProductAttrValueList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function productBySearCh(query) {
+  return request({
+    url: '/store/storeProduct/listBySearch',
+    method: 'get',
+    params: query
+  })
+}
+
+

+ 53 - 0
src/api/hisStore/storeProductAttr.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品属性列表
+export function listStoreProductAttr(query) {
+  return request({
+    url: '/store/storeProductAttr/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品属性详细
+export function getStoreProductAttr(id) {
+  return request({
+    url: '/store/storeProductAttr/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品属性
+export function addStoreProductAttr(data) {
+  return request({
+    url: '/store/storeProductAttr',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品属性
+export function updateStoreProductAttr(data) {
+  return request({
+    url: '/store/storeProductAttr',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品属性
+export function delStoreProductAttr(id) {
+  return request({
+    url: '/store/storeProductAttr/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品属性
+export function exportStoreProductAttr(query) {
+  return request({
+    url: '/store/storeProductAttr/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductAttrValue.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品属性值列表
+export function listStoreProductAttrValue(query) {
+  return request({
+    url: '/store/storeProductAttrValue/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品属性值详细
+export function getStoreProductAttrValue(id) {
+  return request({
+    url: '/store/storeProductAttrValue/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品属性值
+export function addStoreProductAttrValue(data) {
+  return request({
+    url: '/store/storeProductAttrValue',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品属性值
+export function updateStoreProductAttrValue(data) {
+  return request({
+    url: '/store/storeProductAttrValue',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品属性值
+export function delStoreProductAttrValue(id) {
+  return request({
+    url: '/store/storeProductAttrValue/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品属性值
+export function exportStoreProductAttrValue(query) {
+  return request({
+    url: '/store/storeProductAttrValue/export',
+    method: 'get',
+    params: query
+  })
+}

+ 59 - 0
src/api/hisStore/storeProductCategory.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 查询商品分类列表
+export function listStoreProductCategory(query) {
+  return request({
+    url: '/store/storeProductCategory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品分类详细
+export function getStoreProductCategory(cateId) {
+  return request({
+    url: '/store/storeProductCategory/' + cateId,
+    method: 'get'
+  })
+}
+
+// 新增商品分类
+export function addStoreProductCategory(data) {
+  return request({
+    url: '/store/storeProductCategory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品分类
+export function updateStoreProductCategory(data) {
+  return request({
+    url: '/store/storeProductCategory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品分类
+export function delStoreProductCategory(cateId) {
+  return request({
+    url: '/store/storeProductCategory/' + cateId,
+    method: 'delete'
+  })
+}
+
+// 导出商品分类
+export function exportStoreProductCategory(query) {
+  return request({
+    url: '/store/storeProductCategory/export',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllStoreProductCategory() {
+  return request({
+    url: '/store/storeProductCategory/getAllList' ,
+    method: 'get'
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductDetails.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品详情列表
+export function listStoreProductDetails(query) {
+  return request({
+    url: '/store/storeProductDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品详情详细
+export function getStoreProductDetails(detailsId) {
+  return request({
+    url: '/store/storeProductDetails/' + detailsId,
+    method: 'get'
+  })
+}
+
+// 新增商品详情
+export function addStoreProductDetails(data) {
+  return request({
+    url: '/store/storeProductDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品详情
+export function updateStoreProductDetails(data) {
+  return request({
+    url: '/store/storeProductDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品详情
+export function delStoreProductDetails(detailsId) {
+  return request({
+    url: '/store/storeProductDetails/' + detailsId,
+    method: 'delete'
+  })
+}
+
+// 导出商品详情
+export function exportStoreProductDetails(query) {
+  return request({
+    url: '/store/storeProductDetails/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductGroup.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品组合列表
+export function listStoreProductGroup(query) {
+  return request({
+    url: '/store/storeProductGroup/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品组合详细
+export function getStoreProductGroup(groupId) {
+  return request({
+    url: '/store/storeProductGroup/' + groupId,
+    method: 'get'
+  })
+}
+
+// 新增商品组合
+export function addStoreProductGroup(data) {
+  return request({
+    url: '/store/storeProductGroup',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品组合
+export function updateStoreProductGroup(data) {
+  return request({
+    url: '/store/storeProductGroup',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品组合
+export function delStoreProductGroup(groupId) {
+  return request({
+    url: '/store/storeProductGroup/' + groupId,
+    method: 'delete'
+  })
+}
+
+// 导出商品组合
+export function exportStoreProductGroup(query) {
+  return request({
+    url: '/store/storeProductGroup/export',
+    method: 'get',
+    params: query
+  })
+}

+ 71 - 0
src/api/hisStore/storeProductPackage.js

@@ -0,0 +1,71 @@
+import request from '@/utils/request'
+
+// 查询商品组合套餐列表
+export function listStoreProductPackage(query) {
+  return request({
+    url: '/store/storeProductPackage/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品组合套餐详细
+export function getStoreProductPackage(packageId) {
+  return request({
+    url: '/store/storeProductPackage/' + packageId,
+    method: 'get'
+  })
+}
+
+// 新增商品组合套餐
+export function addStoreProductPackage(data) {
+  return request({
+    url: '/store/storeProductPackage',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品组合套餐
+export function updateStoreProductPackage(data) {
+  return request({
+    url: '/store/storeProductPackage',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品组合套餐
+export function delStoreProductPackage(packageId) {
+  return request({
+    url: '/store/storeProductPackage/' + packageId,
+    method: 'delete'
+  })
+}
+
+// 导出商品组合套餐
+export function exportStoreProductPackage(query) {
+  return request({
+    url: '/store/storeProductPackage/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 批量修改商品组合套餐
+export function modifyStoreProductPackages(data) {
+  return request({
+    url: '/store/storeProductPackage/modifyMore',
+    method: 'post',
+    data: data
+  })
+}
+
+export function packageBySearch(query) {
+  return request({
+    url: '/store/storeProductPackage/listBySearch',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductRelation.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品点赞和收藏列表
+export function listStoreProductRelation(query) {
+  return request({
+    url: '/store/storeProductRelation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品点赞和收藏详细
+export function getStoreProductRelation(id) {
+  return request({
+    url: '/store/storeProductRelation/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品点赞和收藏
+export function addStoreProductRelation(data) {
+  return request({
+    url: '/store/storeProductRelation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品点赞和收藏
+export function updateStoreProductRelation(data) {
+  return request({
+    url: '/store/storeProductRelation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品点赞和收藏
+export function delStoreProductRelation(id) {
+  return request({
+    url: '/store/storeProductRelation/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品点赞和收藏
+export function exportStoreProductRelation(query) {
+  return request({
+    url: '/store/storeProductRelation/export',
+    method: 'get',
+    params: query
+  })
+}

+ 62 - 0
src/api/hisStore/storeProductReply.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询评论列表
+export function listStoreProductReply(query) {
+  return request({
+    url: '/store/storeProductReply/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询评论详细
+export function getStoreProductReply(id) {
+  return request({
+    url: '/store/storeProductReply/' + id,
+    method: 'get'
+  })
+}
+
+// 新增评论
+export function addStoreProductReply(data) {
+  return request({
+    url: '/store/storeProductReply',
+    method: 'post',
+    data: data
+  })
+}
+export function replyStoreProductReply(data) {
+  return request({
+    url: '/store/storeProductReply/reply',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+// 修改评论
+export function updateStoreProductReply(data) {
+  return request({
+    url: '/store/storeProductReply',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除评论
+export function delStoreProductReply(id) {
+  return request({
+    url: '/store/storeProductReply/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出评论
+export function exportStoreProductReply(query) {
+  return request({
+    url: '/store/storeProductReply/export',
+    method: 'get',
+    params: query
+  })
+}

+ 61 - 0
src/api/hisStore/storeProductRule.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询商品规则值(规格)列表
+export function listStoreProductRule(query) {
+  return request({
+    url: '/store/storeProductRule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品规则值(规格)详细
+export function getStoreProductRule(id) {
+  return request({
+    url: '/store/storeProductRule/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品规则值(规格)
+export function addStoreProductRule(data) {
+  return request({
+    url: '/store/storeProductRule',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品规则值(规格)
+export function updateStoreProductRule(data) {
+  return request({
+    url: '/store/storeProductRule',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品规则值(规格)
+export function delStoreProductRule(id) {
+  return request({
+    url: '/store/storeProductRule/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品规则值(规格)
+export function exportStoreProductRule(query) {
+  return request({
+    url: '/store/storeProductRule/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getAllStoreProductRule() {
+  return request({
+    url: '/store/storeProductRule/getAllList',
+    method: 'get'
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductTemplate.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品模板列表
+export function listStoreProductTemplate(query) {
+  return request({
+    url: '/store/storeProductTemplate/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品模板详细
+export function getStoreProductTemplate(tempId) {
+  return request({
+    url: '/store/storeProductTemplate/' + tempId,
+    method: 'get'
+  })
+}
+
+// 新增商品模板
+export function addStoreProductTemplate(data) {
+  return request({
+    url: '/store/storeProductTemplate',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品模板
+export function updateStoreProductTemplate(data) {
+  return request({
+    url: '/store/storeProductTemplate',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品模板
+export function delStoreProductTemplate(tempId) {
+  return request({
+    url: '/store/storeProductTemplate/' + tempId,
+    method: 'delete'
+  })
+}
+
+// 导出商品模板
+export function exportStoreProductTemplate(query) {
+  return request({
+    url: '/store/storeProductTemplate/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeProductYuyue.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询商品预约列表
+export function listStoreProductYuyue(query) {
+  return request({
+    url: '/store/storeProductYuyue/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品预约详细
+export function getStoreProductYuyue(id) {
+  return request({
+    url: '/store/storeProductYuyue/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品预约
+export function addStoreProductYuyue(data) {
+  return request({
+    url: '/store/storeProductYuyue',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品预约
+export function updateStoreProductYuyue(data) {
+  return request({
+    url: '/store/storeProductYuyue',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品预约
+export function delStoreProductYuyue(id) {
+  return request({
+    url: '/store/storeProductYuyue/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品预约
+export function exportStoreProductYuyue(query) {
+  return request({
+    url: '/store/storeProductYuyue/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeShop.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询门店自提列表
+export function listStoreShop(query) {
+  return request({
+    url: '/store/storeShop/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询门店自提详细
+export function getStoreShop(id) {
+  return request({
+    url: '/store/storeShop/' + id,
+    method: 'get'
+  })
+}
+
+// 新增门店自提
+export function addStoreShop(data) {
+  return request({
+    url: '/store/storeShop',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改门店自提
+export function updateStoreShop(data) {
+  return request({
+    url: '/store/storeShop',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除门店自提
+export function delStoreShop(id) {
+  return request({
+    url: '/store/storeShop/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出门店自提
+export function exportStoreShop(query) {
+  return request({
+    url: '/store/storeShop/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeShopStaff.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询门店店员列表
+export function listStoreShopStaff(query) {
+  return request({
+    url: '/store/storeShopStaff/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询门店店员详细
+export function getStoreShopStaff(id) {
+  return request({
+    url: '/store/storeShopStaff/' + id,
+    method: 'get'
+  })
+}
+
+// 新增门店店员
+export function addStoreShopStaff(data) {
+  return request({
+    url: '/store/storeShopStaff',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改门店店员
+export function updateStoreShopStaff(data) {
+  return request({
+    url: '/store/storeShopStaff',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除门店店员
+export function delStoreShopStaff(id) {
+  return request({
+    url: '/store/storeShopStaff/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出门店店员
+export function exportStoreShopStaff(query) {
+  return request({
+    url: '/store/storeShopStaff/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/storeVisit.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询产品浏览分析列表
+export function listStoreVisit(query) {
+  return request({
+    url: '/store/storeVisit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询产品浏览分析详细
+export function getStoreVisit(id) {
+  return request({
+    url: '/store/storeVisit/' + id,
+    method: 'get'
+  })
+}
+
+// 新增产品浏览分析
+export function addStoreVisit(data) {
+  return request({
+    url: '/store/storeVisit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改产品浏览分析
+export function updateStoreVisit(data) {
+  return request({
+    url: '/store/storeVisit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除产品浏览分析
+export function delStoreVisit(id) {
+  return request({
+    url: '/store/storeVisit/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出产品浏览分析
+export function exportStoreVisit(query) {
+  return request({
+    url: '/store/storeVisit/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/testReport.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询测试报告列表
+export function listTestReport(query) {
+  return request({
+    url: '/his/testReport/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询测试报告详细
+export function getTestReport(reportId) {
+  return request({
+    url: '/his/testReport/' + reportId,
+    method: 'get'
+  })
+}
+
+// 新增测试报告
+export function addTestReport(data) {
+  return request({
+    url: '/his/testReport',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改测试报告
+export function updateTestReport(data) {
+  return request({
+    url: '/his/testReport',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除测试报告
+export function delTestReport(reportId) {
+  return request({
+    url: '/his/testReport/' + reportId,
+    method: 'delete'
+  })
+}
+
+// 导出测试报告
+export function exportTestReport(query) {
+  return request({
+    url: '/his/testReport/export',
+    method: 'get',
+    params: query
+  })
+}

+ 65 - 0
src/api/hisStore/testTemp.js

@@ -0,0 +1,65 @@
+import request from '@/utils/request'
+
+// 查询测一测模板列表
+export function listTestTemp(query) {
+  return request({
+    url: '/his/testTemp/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询测一测模板详细
+export function getTempType(tempId) {
+  return request({
+    url: '/his/testTemp/getTempType/' + tempId,
+    method: 'get'
+  })
+}
+export function getTestTemp(tempId) {
+  return request({
+    url: '/his/testTemp/' + tempId,
+    method: 'get'
+  })
+}
+export function getAllTestTemp() {
+  return request({
+    url: '/his/testTemp/allList',
+    method: 'get'
+  })
+}
+
+// 新增测一测模板
+export function addTestTemp(data) {
+  return request({
+    url: '/his/testTemp',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改测一测模板
+export function updateTestTemp(data) {
+  return request({
+    url: '/his/testTemp',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除测一测模板
+export function delTestTemp(tempId) {
+  return request({
+    url: '/his/testTemp/' + tempId,
+    method: 'delete'
+  })
+}
+
+// 导出测一测模板
+export function exportTestTemp(query) {
+  return request({
+    url: '/his/testTemp/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/hisStore/testTempItem.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询模板项目列表
+export function listTestTempItem(query) {
+  return request({
+    url: '/his/testTempItem/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询模板项目详细
+export function getTestTempItem(itemId) {
+  return request({
+    url: '/his/testTempItem/' + itemId,
+    method: 'get'
+  })
+}
+
+// 新增模板项目
+export function addTestTempItem(data) {
+  return request({
+    url: '/his/testTempItem',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改模板项目
+export function updateTestTempItem(data) {
+  return request({
+    url: '/his/testTempItem',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除模板项目
+export function delTestTempItem(itemId) {
+  return request({
+    url: '/his/testTempItem/' + itemId,
+    method: 'delete'
+  })
+}
+
+// 导出模板项目
+export function exportTestTempItem(query) {
+  return request({
+    url: '/his/testTempItem/export',
+    method: 'get',
+    params: query
+  })
+}

+ 117 - 0
src/api/hisStore/user.js

@@ -0,0 +1,117 @@
+import request from '@/utils/request'
+
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/store/user/list',
+    method: 'get',
+    params: query
+  })
+}
+export function listUserByProject(query) {
+  return request({
+    url: '/store/user/listProject',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+  return request({
+    url: '/store/user/' + userId,
+    method: 'get'
+  })
+}
+
+// 查询用户详细
+export function queryUserVo(userId) {
+  return request({
+    url: '/store/user/queryvo/' + userId,
+    method: 'get'
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/store/user',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/store/user',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户
+export function delUser(userId) {
+  return request({
+    url: '/store/user/' + userId,
+    method: 'delete'
+  })
+}
+// 删除用户
+export function delUserCompanyUser(id) {
+  return request({
+    url: '/store/user/delete/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户
+export function exportUser(query) {
+  return request({
+    url: '/store/user/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getUserList(query) {
+  return request({
+    url: '/store/user/getUserList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listBySearch(query) {
+  return request({
+    url: '/store/user/listBySearch',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAllUserListLimit(query) {
+  return request({
+    url: '/company/companyUser/getAllUserListLimit',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取小黑屋用户列表
+export function darkRoomList(query) {
+  return request({
+    url: '/store/user/darkRoomList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 批量解禁
+export function enabledUsers(data) {
+  return request({
+    url: '/store/user/enabledUsers',
+    method: 'post',
+    data: data
+  })
+}

+ 61 - 0
src/api/hisStore/userAddress.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询用户地址列表
+export function listUserAddress(query) {
+  return request({
+    url: '/store/userAddress/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户地址详细
+export function getUserAddress(id) {
+  return request({
+    url: '/store/userAddress/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户地址
+export function addUserAddress(data) {
+  return request({
+    url: '/store/userAddress',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户地址
+export function updateUserAddress(data) {
+  return request({
+    url: '/store/userAddress',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户地址
+export function delUserAddress(id) {
+  return request({
+    url: '/store/userAddress/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户地址
+export function exportUserAddress(query) {
+  return request({
+    url: '/store/userAddress/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAddressList(query) {
+  return request({
+    url: '/store/userAddress/getAddressList',
+    method: 'get',
+    params: query
+  })
+}

+ 65 - 0
src/api/hisStore/vessel.js

@@ -0,0 +1,65 @@
+import request from '@/utils/request'
+
+// 查询经络管理列表
+export function listVessel(query) {
+  return request({
+    url: '/his/vessel/list',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllList() {
+  return request({
+    url: '/his/vessel/allList',
+    method: 'get'
+  })
+}
+
+// 查询经络管理详细
+export function getVessel(id) {
+  return request({
+    url: '/his/vessel/' + id,
+    method: 'get'
+  })
+}
+// 下载导入模板
+export function importTemplate() {
+  return request({
+    url: '/his/questions/importTemplate',
+    method: 'get'
+  })
+}
+// 新增经络管理
+export function addVessel(data) {
+  return request({
+    url: '/his/vessel',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改经络管理
+export function updateVessel(data) {
+  return request({
+    url: '/his/vessel',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除经络管理
+export function delVessel(id) {
+  return request({
+    url: '/his/vessel/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出经络管理
+export function exportVessel(query) {
+  return request({
+    url: '/his/vessel/export',
+    method: 'get',
+    params: query
+  })
+}

BIN=BIN
src/assets/logo/kyt.jpg


BIN=BIN
src/assets/logo/syysy.png


BIN=BIN
src/assets/logo/zkzh_logo.png


+ 241 - 0
src/components/SmartEndpointToggle/ScrmEndpointButton.vue

@@ -0,0 +1,241 @@
+
+<!--add by chenguo 2025年7月31日
+    可用于不修改api/*.js 接口,实现前端代码复用
+    通过添加请求前缀的方式访问接口 如:/his/store/productList => [your-prefix]/his/store/productList
+    使用说明:引入组件并指定prefix及componentName(尽可能唯一)
+            添加组件方式:
+            <smart-endpoint-toggle-button
+            prefix="[your-prefix]"
+            regexGate="[regs]"  -- 正则匹配接口路径如/his/store/productList 可填写/his/store 支持多个逗号分割
+            component-name="[your-component-name]">
+            </smart-endpoint-toggle-button>
+            提供可用的回调
+            @afterEndpoint="handleAfterEndpointToggle"
+            @beforeEndpoint="handleBeforeEndpointToggle"
+ -->
+<template>
+  <div class="endpoint-toggle-container">
+    <div class="toggle-switch" :class="{ 'new-endpoint': isUsingNewEndpoint }">
+      <div class="toggle-option old-endpoint" @click="selectOldEndpoint">
+        <span>旧接口</span>
+      </div>
+      <div class="toggle-option new-endpoint" @click="selectNewEndpoint">
+        <span>新接口</span>
+      </div>
+      <div class="toggle-slider"></div>
+    </div>
+  </div>
+</template>
+
+<script>import {
+  resetEndpoint, setActive,
+} from '@/utils/request'
+
+export default {
+  name: 'ScrmEndpointButton',
+  props: {
+    //prefix:加在js请求前的方法
+    prefix: {
+      type: String,
+      required: true
+    },
+    //regexGate:只对特定路径使用
+    regexGate: {
+      type: String,
+      required: true
+    },
+    // 组件名称,用于生成唯一标识
+    componentName: {
+      type: String,
+      required: true
+    },
+    // 默认选中状态(false表示默认选中旧接口,true表示默认选中新接口)
+    defaultNewEndpoint: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      isUsingNewEndpoint: false,
+      stateKey: ''
+    }
+  },
+  created() {
+    // 生成基于组件名和路由的唯一状态键
+    this.stateKey = this.generateStateKey()
+    // 初始化状态
+    this.initializeState()
+  },
+  activated() {
+    setActive(this.stateKey);
+    // 页面激活时恢复状态
+    this.restoreState()
+  },
+  deactivated() {
+    // 页面失活时保存状态
+    this.saveState()
+  },
+  destroyed() {
+    // 组件销毁
+    resetEndpoint(this.stateKey)
+  },
+  methods: {
+    // 生成状态存储的唯一键
+    generateStateKey() {
+      const routePath = this.$route ? this.$route.path : ''
+      const routeQuery = this.$route && this.$route.query ? JSON.stringify(this.$route.query) : ''
+      return `endpoint_toggle_${this.componentName}_${routePath}_${routeQuery}`
+    },
+
+    // 初始化状态
+    initializeState() {
+      setActive(this.stateKey)
+      // 默认选中旧接口
+      this.isUsingNewEndpoint = this.defaultNewEndpoint
+      this.saveState();
+    },
+
+    // 保存状态到 sessionStorage
+    saveState() {
+      try {
+        const state = {
+          prefix: this.prefix,
+          regexGate: this.regexGate,
+          isUsingNewEndpoint: this.isUsingNewEndpoint,
+          timestamp: Date.now()
+        }
+        sessionStorage.setItem(this.stateKey, JSON.stringify(state))
+      } catch (e) {
+        console.warn('Failed to save endpoint toggle state:', e)
+      }
+    },
+
+    // 从 sessionStorage 恢复状态
+    restoreState() {
+      try {
+        const stateStr = sessionStorage.getItem(this.stateKey)
+        if (stateStr) {
+          const state = JSON.parse(stateStr)
+          this.isUsingNewEndpoint = state.isUsingNewEndpoint || false
+        } else {
+          this.isUsingNewEndpoint = this.defaultNewEndpoint
+        }
+      } catch (e) {
+        console.warn('Failed to restore endpoint toggle state:', e)
+        this.isUsingNewEndpoint = this.defaultNewEndpoint
+      }
+    },
+
+    // 选择旧接口
+    selectOldEndpoint() {
+      if (this.isUsingNewEndpoint) {
+        this.toggleEndpointState(false)
+      }
+    },
+
+    // 选择新接口
+    selectNewEndpoint() {
+      if (!this.isUsingNewEndpoint) {
+        this.toggleEndpointState(true)
+      }
+    },
+
+    // 切换端点状态
+    async toggleEndpointState(newState) {
+      // 触发切换前事件
+      const beforeResult = this.$emit('beforeEndpoint', this.isUsingNewEndpoint)
+      if (beforeResult === false) {
+        return
+      }
+
+      try {
+        // 更新状态
+        this.isUsingNewEndpoint = newState
+
+        // 保存状态
+        this.saveState()
+
+        // 触发切换后事件
+        this.$emit('afterEndpoint', this.isUsingNewEndpoint)
+
+        // 执行回调
+        //if (this.$listeners.afterToggle) {
+        //  await this.$listeners.afterToggle(this.isUsingNewEndpoint)
+        //}
+      } catch (error) {
+        console.error('Failed to toggle endpoint state:', error)
+        // 发生错误时回滚状态
+        this.isUsingNewEndpoint = !newState
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>.endpoint-toggle-container {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.toggle-switch {
+  position: relative;
+  display: flex;
+  width: 145px;
+  height: 32px;
+  background-color: #f5f7fa;
+  border-radius: 16px;
+  cursor: pointer;
+  overflow: hidden;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) inset;
+}
+
+.toggle-option {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  z-index: 2;
+  transition: color 0.3s ease;
+  font-size: 12px;
+  font-weight: 500;
+}
+
+.toggle-option.old-endpoint {
+  color: #ffffff;
+}
+
+.toggle-option.new-endpoint {
+  color: #606266;
+}
+
+.toggle-switch.new-endpoint .toggle-option.old-endpoint {
+  color: #606266;
+}
+
+.toggle-switch.new-endpoint .toggle-option.new-endpoint {
+  color: #ffffff;
+}
+
+.toggle-slider {
+  position: absolute;
+  top: 2px;
+  left: 2px;
+  width: calc(50% - 2px);
+  height: calc(100% - 4px);
+  background-color: #3576f8;
+  border-radius: 14px;
+  transition: transform 0.3s ease;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+  z-index: 1;
+}
+
+.toggle-switch.new-endpoint .toggle-slider {
+  transform: translateX(100%);
+}
+
+/* 悬停效果 */
+.toggle-option:hover {
+  opacity: 0.6;
+}
+</style>

+ 7 - 0
src/permission.js

@@ -10,6 +10,13 @@ NProgress.configure({ showSpinner: false })
 const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
 
 router.beforeEach((to, from, next) => {
+
+  if(to.path.includes('/hisStore')){
+    sessionStorage.setItem('hisStore',"1");
+  }else{
+    sessionStorage.setItem('hisStore',"0");
+  }
+
   NProgress.start()
   if (getToken()) {
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)

+ 11 - 3
src/utils/request.js

@@ -14,11 +14,19 @@ const service = axios.create({
 })
 // request拦截器
 service.interceptors.request.use(config => {
+  //判断APP商城请求
+  if(sessionStorage.getItem('hisStore') === '1'
+    && (config.url.includes('store') || config.url.includes('order'))
+    && (config.url.indexOf('/system/dict/data/type') === -1)
+  ){
+    config.url = '/store' + config.url;
+  }
+
   //判断watch请求
   if(config.url.indexOf('/watch-api') == -1){
     config.url = process.env.VUE_APP_BASE_API + config.url
   }
- 
+
   // 是否需要设置 token
   const isToken = (config.headers || {}).isToken === false
   if (getToken() && !isToken) {
@@ -51,8 +59,8 @@ service.interceptors.request.use(config => {
   }
   return config
 }, error => {
-    console.log(error)
-    Promise.reject(error)
+  console.log(error)
+  Promise.reject(error)
 })
 
 // 响应拦截器

+ 143 - 0
src/utils/requestHisStore.js

@@ -0,0 +1,143 @@
+/*
+import axios from 'axios'
+import { Notification, MessageBox, Message } from 'element-ui'
+import store from '@/store'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+// 创建axios实例
+const service = axios.create({
+  // axios中请求配置有baseURL选项,表示请求URL公共部分
+  // baseURL: process.env.VUE_APP_BASE_API,
+  // 超时
+  timeout: 1200000
+})
+
+// 存储当前激活的组件状态键
+let activeStateKey = null;
+
+// 重置指定页面的状态
+export function resetEndpoint() {
+  setActive(null);
+}
+// 设置当前激活状态键
+export function setActive(stateKey) {
+  activeStateKey = stateKey;
+}
+
+
+// request拦截器
+service.interceptors.request.use(config => {
+
+  // 使用当前激活的组件状态来决定是否添加前缀
+  let useNewEndpoint = false
+  let routePrefix = ''
+  let canReg = false
+  if (activeStateKey) {
+    const state = JSON.parse(sessionStorage.getItem(activeStateKey));
+    useNewEndpoint = state.isUsingNewEndpoint;
+    routePrefix = state.prefix;
+    canReg= state.regexGate.split(',').any(reg => config.url.includes(reg));
+  }
+  if (useNewEndpoint && canReg) {
+    config.url = routePrefix + config.url;
+  }
+
+  //判断watch请求
+  if(config.url.indexOf('/watch-api') == -1){
+    config.url = process.env.VUE_APP_BASE_API + config.url
+  }
+
+  // 是否需要设置 token
+  const isToken = (config.headers || {}).isToken === false
+  if (getToken() && !isToken) {
+    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+    config.headers['X-Frontend-Type'] = 'admin'
+  }
+  // get请求映射params参数
+  if (config.method === 'get' && config.params) {
+    let url = config.url + '?';
+    for (const propName of Object.keys(config.params)) {
+      const value = config.params[propName];
+      var part = encodeURIComponent(propName) + "=";
+      if (value !== null && typeof(value) !== "undefined") {
+        if (typeof value === 'object') {
+          for (const key of Object.keys(value)) {
+            if (value[key] !== null && typeof (value[key]) !== 'undefined') {
+              let params = propName + '[' + key + ']';
+              let subPart = encodeURIComponent(params) + '=';
+              url += subPart + encodeURIComponent(value[key]) + '&';
+            }
+          }
+        } else {
+          url += part + encodeURIComponent(value) + "&";
+        }
+      }
+    }
+    url = url.slice(0, -1);
+    config.params = {};
+    config.url = url;
+  }
+  return config
+}, error => {
+    console.log(error)
+    Promise.reject(error)
+})
+
+// 响应拦截器
+service.interceptors.response.use(res => {
+    // 未设置状态码则默认成功状态
+    const code = res.data.code || 200;
+    // 获取错误信息
+    const msg = errorCode[code] || res.data.msg || errorCode['default']
+    if (code === 401) {
+      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+          confirmButtonText: '重新登录',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }
+      ).then(() => {
+        store.dispatch('LogOut').then(() => {
+          location.href = '/index';
+        })
+      }).catch(() => {});
+      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+    } else if (code === 500) {
+      Message({
+        message: msg,
+        type: 'error'
+      })
+      return Promise.reject(new Error(msg))
+    } else if (code !== 200) {
+      Notification.error({
+        title: msg
+      })
+      return Promise.reject('error')
+    } else {
+      return res.data
+    }
+  },
+  error => {
+    console.log('err' + error)
+    let { message } = error;
+    if (message == "Network Error") {
+      message = "后端接口连接异常";
+    }
+    else if (message.includes("timeout")) {
+      message = "系统接口请求超时";
+    }
+    else if (message.includes("Request failed with status code")) {
+      message = "系统接口" + message.substr(message.length - 3) + "异常";
+    }
+    Message({
+      message: message,
+      type: 'error',
+      duration: 5 * 1000
+    })
+    return Promise.reject(error)
+  }
+)
+
+export default service
+*/

+ 41 - 39
src/views/components/course/userCourseCatalogDetails.vue

@@ -6,7 +6,7 @@
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="小节名称" prop="title">
         <el-input v-model="queryParams.title" placeholder="请输入小节名称" clearable size="small"
-          @keyup.enter.native="handleQuery" />
+                  @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -16,23 +16,23 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-          v-hasPermi="['course:userCourseVideo:add']">新增目录</el-button>
+                   v-hasPermi="['course:userCourseVideo:add']">新增目录</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain :disabled="!ids || ids.length <= 0" size="mini" @click="openUpdates"
-          v-hasPermi="['course:userCourseVideo:updateTime']">修改时间</el-button>
+                   v-hasPermi="['course:userCourseVideo:updateTime']">修改时间</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain size="mini" @click="openAdds"
-          v-hasPermi="['course:userCourseVideo:batchAdd']">批量添加</el-button>
+                   v-hasPermi="['course:userCourseVideo:batchAdd']">批量添加</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button type="primary" plain size="mini" v-if="isPrivate === 1" @click="updateRedPageckeOpen"
-          v-hasPermi="['course:userCourseVideo:updateRed']">修改红包</el-button>
+        <el-button type="primary" plain size="mini" @click="updateRedPageckeOpen"
+                   v-hasPermi="['course:userCourseVideo:updateRed']">修改红包</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
-          v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
+                   v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -66,23 +66,23 @@
           <el-tag type="danger" v-if="!row.lastJoinTime">无</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="红包金额" align="center" prop="redPacketMoney" v-if="isPrivate === 1" />
+      <el-table-column label="红包金额" align="center" prop="redPacketMoney" />
       <el-table-column label="排序" align="center" prop="courseSort" />
       <el-table-column label="上传时间" align="center" prop="createTime" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-            v-hasPermi="['course:userCourseVideo:edit']">修改</el-button>
+                     v-hasPermi="['course:userCourseVideo:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleComment(scope.row)"
-            v-hasPermi="['course:courseWatchComment:list']">查看评论</el-button>
+                     v-hasPermi="['course:courseWatchComment:list']">查看评论</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-            v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
+                     v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
 
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-      @pagination="getList" />
+                @pagination="getList" />
     <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="110px" v-loading="uploadLoading">
         <el-form-item label="视频标题" prop="title">
@@ -120,19 +120,19 @@
 
         <el-form-item label="视频缩略图" prop="thumbnail">
           <el-upload v-model="form.thumbnail" class="avatar-uploader" :action="uploadUrl" :show-file-list="false"
-            :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
+                     :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
             <img v-if="form.thumbnail" :src="form.thumbnail" class="avatar" width="300px">
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </el-upload>
         </el-form-item>
         <video-upload :type="1" :isPrivate="isPrivate" :fileKey.sync="form.fileKey" :fileSize.sync="form.fileSize"
-          :videoUrl.sync="videoUrl" :fileName.sync="form.fileName" :line_1.sync="form.lineOne"
-          :line_2.sync="form.lineTwo" :line_3.sync="form.lineThree" :thumbnail.sync="form.thumbnail"
-          :uploadType.sync="form.uploadType" :isTranscode.sync="form.isTranscode"
-          :transcodeFileKey.sync="form.transcodeFileKey" @video-duration="handleVideoDuration"
-          @change="handleVideoChange" @selectProjects="handleSelectProjects" ref="videoUpload" append-to-body />
-        
-        <el-form-item label="课题选择" prop="questionBankId" v-if="isPrivate === 1">
+                      :videoUrl.sync="videoUrl" :fileName.sync="form.fileName" :line_1.sync="form.lineOne"
+                      :line_2.sync="form.lineTwo" :line_3.sync="form.lineThree" :thumbnail.sync="form.thumbnail"
+                      :uploadType.sync="form.uploadType" :isTranscode.sync="form.isTranscode"
+                      :transcodeFileKey.sync="form.transcodeFileKey" @video-duration="handleVideoDuration"
+                      @change="handleVideoChange" @selectProjects="handleSelectProjects" ref="videoUpload" append-to-body />
+
+        <el-form-item label="课题选择" prop="questionBankId">
           <el-button size="small" type="primary" @click="chooseQuestionBank">选取课题</el-button>
           <el-table border width="100%" style="margin-top:5px;" :data="form.questionBankList">
 
@@ -155,12 +155,12 @@
             <el-table-column label="操作" align="center" width="100px" fixed="right">
               <template slot-scope="scope">
                 <el-button size="mini" type="text" icon="el-icon-delete"
-                  @click="handleQuestionBankDelete(scope.row)">删除</el-button>
+                           @click="handleQuestionBankDelete(scope.row)">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
         </el-form-item>
-        <el-form-item label="红包金额" prop="redPacketMoney" v-if="isPrivate === 1">
+        <el-form-item label="红包金额" prop="redPacketMoney">
           <el-input-number v-model="form.redPacketMoney" :min="0.1" :max="200" :step="0.1"></el-input-number>
         </el-form-item>
         <el-form-item label="是否关联商品">
@@ -177,7 +177,7 @@
             <el-table-column label="操作" align="center" width="100px" fixed="right">
               <template slot-scope="scope">
                 <el-button size="mini" type="text" icon="el-icon-delete"
-                  @click="handleCourseProductDelete(scope.row)">删除</el-button>
+                           @click="handleCourseProductDelete(scope.row)">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -204,12 +204,12 @@
       <el-form ref="form" :model="updateBatchData.form" label-width="110px">
         <el-form-item label="看课时间" prop="timeRange">
           <el-time-picker is-range v-model="updateBatchData.form.timeRange" range-separator="至" start-placeholder="开始时间"
-            value-format="HH:mm:ss" end-placeholder="结束时间" placeholder="选择时间范围">
+                          value-format="HH:mm:ss" end-placeholder="结束时间" placeholder="选择时间范围">
           </el-time-picker>
         </el-form-item>
         <el-form-item label="领取红包时间" prop="lastJoinTime">
           <el-time-picker v-model="updateBatchData.form.lastJoinTime" :selectableRange="updateBatchData.form.timeRange"
-            value-format="HH:mm:ss" placeholder="选择时间范围">
+                          value-format="HH:mm:ss" placeholder="选择时间范围">
           </el-time-picker>
           <p style="color: red;margin: 0;font-size: 12px">超过领取红包时间,只允许看课,不允许领取红包</p>
         </el-form-item>
@@ -230,19 +230,19 @@
       <el-form :inline="true" :model="addBatchData.queryParams" class="library-search">
         <el-form-item label="素材名称">
           <el-input v-model="addBatchData.queryParams.resourceName" placeholder="请输入素材名称" clearable size="small"
-            @keyup.enter.native="resourceList" />
+                    @keyup.enter.native="resourceList" />
         </el-form-item>
         <el-form-item label="类型">
           <el-select v-model="addBatchData.queryParams.typeId" @change="changeCateType" placeholder="请选择素材类型" clearable
-            size="small">
+                     size="small">
             <el-option v-for="item in addBatchData.typeOptions" :key="item.dictValue" :label="item.dictLabel"
-              :value="item.dictValue" />
+                       :value="item.dictValue" />
           </el-select>
         </el-form-item>
         <el-form-item label="子类型">
           <el-select v-model="addBatchData.queryParams.typeSubId" placeholder="请选择素材子类型" clearable size="small">
             <el-option v-for="item in addBatchData.typeSubOptions" :key="item.dictValue" :label="item.dictLabel"
-              :value="item.dictValue" />
+                       :value="item.dictValue" />
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -252,7 +252,7 @@
 
       <!-- 视频列表 -->
       <el-table v-loading="addBatchData.loading" :data="addBatchData.list"
-        @selection-change="handVideoleSelectionChange" height="400px">
+                @selection-change="handVideoleSelectionChange" height="400px">
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="素材名称" align="center" prop="resourceName" />
         <el-table-column label="文件名称" align="center" prop="fileName" />
@@ -274,8 +274,8 @@
 
       <!-- 分页 -->
       <pagination v-show="addBatchData.total > 0" :total="addBatchData.total"
-        :page.sync="addBatchData.queryParams.pageNum" :limit.sync="addBatchData.queryParams.pageSize"
-        @pagination="resourceList" />
+                  :page.sync="addBatchData.queryParams.pageNum" :limit.sync="addBatchData.queryParams.pageSize"
+                  @pagination="resourceList" />
 
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="batchVideoSave">确 定</el-button>
@@ -304,9 +304,9 @@
       </div>
     </el-dialog>
     <el-dialog :title="commentDialog.title" :visible.sync="commentDialog.open" width="1000px" append-to-body
-      :close-on-click-modal="false">
+               :close-on-click-modal="false">
       <course-watch-comment ref="courseWatchComment" :courseId="commentDialog.courseId" :videoId="commentDialog.videoId"
-        v-if="commentDialog.open">
+                            v-if="commentDialog.open">
       </course-watch-comment>
     </el-dialog>
 
@@ -429,7 +429,9 @@ export default {
       // 非多个禁用
       multiple: true,
       // 表单参数
-      form: {},
+      form: {
+        courseProducts:[]
+      },
       updateBatchData: {
         open: false,
         form: {}
@@ -685,7 +687,6 @@ export default {
         isTranscode: 0,
         transcodeFileKey: null,
         isProduct: 0,
-        productId: null,
         listingStartTime: null,
         listingEndTime: null,
       };
@@ -766,10 +767,12 @@ export default {
             });
             return
           }
-          if (this.form.timeRange != null && this.form.timeRange.length === 2) {
+
+          if (this.form.timeRange && this.form.timeRange.length === 2) {
             this.form.viewStartTime = this.form.timeRange[0];
             this.form.viewEndTime = this.form.timeRange[1];
           }
+
           if (this.form.duration == null) {
             this.$message({
               message: '未识别到视频时长请稍等。。。',
@@ -778,7 +781,7 @@ export default {
             return
           }
           if (this.form.isProduct != null && this.form.isProduct == 1 && this.form.courseProducts.length < 1) {
-             this.$message({
+            this.$message({
               message: '请选择关联商品',
               type: 'warning'
             });
@@ -886,7 +889,6 @@ export default {
         });
         return
       }
-      console.log(this.addBatchData.select)
       this.addBatchData.form.ids = this.addBatchData.select;
       batchSaveVideo(this.addBatchData.form).then(response => {
         this.addBatchData.open = false;

+ 130 - 33
src/views/components/his/storeOrderDetails.vue

@@ -299,9 +299,11 @@
                         <el-option key="SF"  label="顺丰" value="SF" />
                         <el-option key="EMS"  label="邮政" value="EMS" />
                          <el-option key="ZTO"  label="中通" value="ZTO" />
+                         <el-option key="STO"  label="申通" value="ZTO" />
                          <el-option key="JD"  label="京东" value="JD" />
                          <el-option key="DBL"  label="德邦" value="DBL" />
-						 <el-option key="YD"  label="韵达" value="YD" />
+						              <el-option key="YD"  label="韵达" value="YD" />
+						              <el-option key="STO"  label="申通" value="STO" />
                        </el-select>
                      </el-form-item>
                     <el-form-item label="物流单号" prop="deliverySn"  >
@@ -341,6 +343,7 @@
                           :key="dict.dictValue"
                           :label="dict.dictLabel"
                           :value="dict.dictValue"
+                          :disabled="dict.dictLabel == '待推送'"
                         />
                       </el-select>
                    </el-form-item>
@@ -355,7 +358,7 @@
                       </el-select>
                    </el-form-item>
                    <el-form-item label="物流跟踪状态" prop="deliveryType" >
-                   <el-select v-model="editForm.deliveryType" placeholder="请选择状态" clearable size="small" filterable>
+                    <el-select v-model="editForm.deliveryType" placeholder="请选择状态" clearable size="small" filterable>
                         <el-option
                           v-for="dict in deliveryTypeOptions "
                           :key="dict.dictValue"
@@ -365,8 +368,18 @@
                       </el-select>
                    </el-form-item>
                    <el-form-item label="详情地址" prop="userAddress"  >
-                    <el-input v-model="editForm.userAddress" placeholder="请输入" />
-                  </el-form-item>
+                    <el-cascader
+                      ref="citySelect"
+                      v-model="cityIds"
+                      :options="citys"
+                      @change="handleCityChange"
+                      clearable>
+                    </el-cascader>
+                    <el-input v-model="editForm.userAddress" placeholder="请输入详细地址(不含省/市/区)" />
+                   </el-form-item>
+                   <el-form-item label="收货人电话" prop="userPhone"  >
+                    <el-input v-model="editForm.userPhone" placeholder="请输入" />
+                   </el-form-item>
                   <el-form-item label="备注" prop="remark"  >
                     <el-input v-model="editForm.remark" placeholder="请输入备注" />
                   </el-form-item>
@@ -418,12 +431,13 @@
 </template>
 
 <script>
-import {getMsgFollow,sendMsg,msgList,updateMoney,getGoods,getEroOrder,editTuiMoney,updateDelivery,createErpOrder,updateExpress,updateErp, afterSales,sendgoods,logList,listOrder,getExpress,syncExpress, listOrderitem,getOrder, delOrder, addOrder, updateOrder, exportOrder,payment,tuiOrder ,getPrescribe,getOrderUserPhone,returnCost} from "@/api/his/storeOrder";
+import {getMsgFollow,sendMsg,msgList,updateMoney,getGoods,getEroOrder,editTuiMoney,updateDelivery,createErpOrder,updateExpress,updateErp, afterSales,sendgoods,logList,listOrder,getExpress,syncExpress, listOrderitem,getOrder, delOrder, addOrder, updateStoreOrder, exportOrder,payment,tuiOrder ,getPrescribe,getOrderUserPhone,returnCost} from "@/api/his/storeOrder";
 import inquiryOrderDetails from '../his/inquiryOrderDetails.vue';
 import packageOrderDetails from '../his/packageOrderDetails2.vue';
 import prescribeDetails from '../his/prescribeDetails.vue';
 import msgDetails from '../../components/his/followMsgDetails.vue';
 import { getTcmScheduleList } from "@/api/company/schedule";
+import {getCitys} from "@/api/store/city";
   export default {
     name: "orderDe",
     props:["data"],
@@ -515,6 +529,7 @@ import { getTcmScheduleList } from "@/api/company/schedule";
           userAddress:null,
           deliveryStatus:null,
           deliveryType:null,
+          userPhone:null,
           remark:"",
         },
         editDyRules:{
@@ -539,8 +554,12 @@ import { getTcmScheduleList } from "@/api/company/schedule";
           deliveryName:null,
           deliverySn:null,
           orderId:null,
-        }
+        },
+        cityIds:[],
+        citys:[],
+        userAddress:null,
       }
+
     },
 
     created() {
@@ -595,6 +614,35 @@ import { getTcmScheduleList } from "@/api/company/schedule";
 
     },
     methods: {
+      getCitys() {
+        return getCitys().then(res => {
+          this.citys = res.data || [];
+          return this.citys;
+        });
+      },
+      // 新增:切换省市区
+      handleCityChange(val) {
+        this.cityIds = Array.isArray(val) ? val : [];
+      },
+
+      // 新增:根据已选的 cityIds 从 citys 中获取对应的 label 数组 [省, 市, 区]
+      getCityLabelsByIds() {
+        if (!this.cityIds || this.cityIds.length === 0) return [];
+        const [pVal, cVal, aVal] = this.cityIds;
+        const p = this.citys.find(p => p.value === pVal);
+        const c = p?.children?.find(c => c.value === cVal);
+        const a = c?.children?.find(a => a.value === aVal);
+        return [p?.label, c?.label, a?.label].filter(Boolean);
+      },
+
+      // 新增:拼装完整地址 = 省 市 区 + 详细地址
+      buildFullAddress() {
+        const region = this.getCityLabelsByIds().join(' ');
+        const detail = (this.editForm.userAddress || '').trim();
+        console.log(region)
+        console.log(detail)
+        return region && detail ? `${region} ${detail}` : (region || detail || '');
+      },
 
       followMsg(row){
          const userId = this.item.userId;
@@ -625,8 +673,11 @@ import { getTcmScheduleList } from "@/api/company/schedule";
       },
       editDelivery(){
         this.editDy.open = true;
+        console.log(this.item)
         this.editDyForm.orderId = this.item.orderId;
-
+        this.editDyForm.deliveryId = this.item.deliveryId;
+        this.editDyForm.deliveryCode = this.item.deliveryCode;
+        this.editDyForm.deliverySn = this.item.deliverySn;
       },
       showListD(){
         if(this.showList){
@@ -702,33 +753,74 @@ import { getTcmScheduleList } from "@/api/company/schedule";
       });
     },
 
-    //修改订单状态
-    submitEditForm(){
-        this.$refs["editForm"].validate(valid => {
-        if (valid) {
-          updateOrder(this.editForm).then(response => {
-            if (response.code === 200) {
-              this.msgSuccess("操作成功");
-               this.edit.open = false;
-              getOrder(this.item.orderId).then(response => {
-                this.item=response.data
-                that.getlogList(this.item.orderId);
-                that.$parent.$parent.getList();
-              });
-            }
-          });
-        }
-      });
+    // 修改订单状态
+    submitEditForm() {
+      this.$refs["editForm"].validate(valid => {
+        if (!valid) return;
+
+        // 提交前拼接完整地址
+        const payload = {
+          ...this.editForm,
+          userAddress: this.buildFullAddress(),
+        };
+
+        updateStoreOrder(payload).then(response => {
+          if (response.code === 200) {
+            this.msgSuccess("操作成功");
+            this.edit.open = false;
+            getOrder(this.item.orderId).then(response => {
+              this.item = response.data;
+              this.getlogList(this.item.orderId);
+              this.$parent.$parent.getList();
+            });
+          }
+        }).finally(()=>{
+          this.editDyForm.deliveryCode = null;
+          this.editDyForm.orderId = null;
+          this.editDyForm.deliveryId = null;
+        });
+        });
     },
-    editOrder(){
-        this.edit.open=true;
-        this.editForm.orderId=this.item.orderId;
-        this.editForm.remark=this.item.remark;
-        this.editForm.userAddress = this.item.userAddress.toString();
-        this.editForm.status = this.item.status.toString();
-        this.editForm.deliveryType = this.item.deliveryType.toString();
-        this.editForm.deliveryStatus = this.item.deliveryStatus.toString();
+    editOrder() {
+      this.edit.open = true;
+      this.editForm.orderId = this.item.orderId;
+      this.editForm.remark = this.item.remark;
+
+      // 先设置其他同步的字段
+      this.editForm.userPhone = this.item.userPhone != null ? this.item.userPhone.toString() : "";
+      this.editForm.status = this.item.status != null ? this.item.status.toString() : "";
+      this.editForm.deliveryType = this.item.deliveryType;
+      this.editForm.deliveryStatus = this.item.deliveryStatus;
+
+      // 等城市数据加载后再解析地址
+      const currentAddress = (this.item.userAddress || "").toString().trim();
+      this.getCitys().then(() => {
+        if (!currentAddress) {
+          this.cityIds = [];
+          this.editForm.userAddress = "";
+          return;
+        }
+
+        // 假设格式为:省 市 区 详细地址(空格分隔)
+        const parts = currentAddress.split(/\s+/);
+        const detail = parts.pop() || ""; // 最后一段作为详细地址
+        const provLabel = parts[0];
+        const cityLabel = parts[1];
+        const areaLabel = parts[2];
 
+        const province = this.citys.find(p => p.label === provLabel);
+        const city = province?.children?.find(c => c.label === cityLabel);
+        const area = city?.children?.find(a => a.label === areaLabel);
+
+        if (province && city && area) {
+          this.cityIds = [province.value, city.value, area.value];
+        } else {
+          console.warn("未匹配到完整省市区:", { provLabel, cityLabel, areaLabel });
+          this.cityIds = [];
+        }
+        // 把详细地址写回到输入框(只保留详细地址,不含省市区)
+        this.editForm.userAddress = detail;
+      });
     },
     updateExpress(){
       var that=this;
@@ -1006,7 +1098,12 @@ import { getTcmScheduleList } from "@/api/company/schedule";
                       this.$parent.$parent.getList();
                   });
               }
-            });
+            }).finally(()=>{
+              this.editDyForm.deliveryCode = null;
+              this.editDyForm.orderId = null;
+              this.editDyForm.deliveryId = null;
+              this.editDyForm.deliverySn = null;
+            })
           }
         });
       },

+ 11 - 3
src/views/components/his/storeOrderDetails2.vue

@@ -300,7 +300,8 @@
                          <el-option key="ZTO"  label="中通" value="ZTO" />
                          <el-option key="JD"  label="京东" value="JD" />
                          <el-option key="DBL"  label="德邦" value="DBL" />
-						 <el-option key="YD"  label="韵达" value="YD" />
+						              <el-option key="YD"  label="韵达" value="YD" />
+						              <el-option key="STO"  label="申通" value="STO" />
                        </el-select>
                      </el-form-item>
                     <el-form-item label="物流单号" prop="deliverySn"  >
@@ -620,8 +621,10 @@ import { getTcmScheduleList } from "@/api/company/schedule";
       },
       editDelivery(){
         this.editDy.open = true;
+        console.log(this.item)
         this.editDyForm.orderId = this.item.orderId;
-
+        this.editDyForm.deliveryId = this.item.deliveryId;
+        this.editDyForm.deliveryCode = this.item.deliveryCode;
       },
       showListD(){
         if(this.showList){
@@ -1001,7 +1004,12 @@ import { getTcmScheduleList } from "@/api/company/schedule";
                       this.$parent.$parent.getList();
                   });
               }
-            });
+            }).finally(()=>{
+              this.editDyForm.deliveryCode = null;
+              this.editDyForm.orderId = null;
+              this.editDyForm.deliveryId = null;
+              this.editDyForm.deliverySn = null;
+            })
           }
         });
       },

+ 4 - 4
src/views/course/userCourse/public.vue

@@ -270,7 +270,7 @@
             </el-form-item>
           </el-col> -->
           <el-col :span="8">
-            <el-form-item label="关联达人" prop="talentId">
+            <el-form-item label="关联达人">
               <el-select v-model="form.talentId" remote filterable clearable reserve-keyword
                          placeholder="输入手机号搜索" :remote-method="talentMethod">
                 <el-option
@@ -548,9 +548,9 @@ export default {
         imgUrl: [
           {required: true, message: "封面图片不能为空", trigger: "blur"}
         ],
-        talentId: [
-          {required: true, message: "关联达人不能为空", trigger: "blur"}
-        ],
+        // talentId: [
+        //   {required: true, message: "关联达人不能为空", trigger: "blur"}
+        // ],
         isTui: [
           {required: true, message: "是否推荐不能为空", trigger: "blur"}
         ],

+ 117 - 26
src/views/course/userCoursePeriod/redPacket.vue

@@ -1,24 +1,36 @@
 <template>
   <div>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          size="mini"
+          :disabled="this.selectCompanyIds.length === 0"
+          @click="handleChangeRedPacket"
+          v-hasPermi="['course:period:setCompanyRedPacket']"
+        >批量设置红包</el-button>
+      </el-col>
+    </el-row>
     <!-- 公司列表弹窗 -->
-<!--    <el-dialog title="设置红包" :visible.sync="companyDialogVisible" width="800px" append-to-body>-->
-      <el-table :data="companyList" border>
-        <el-table-column type="index" label="序号" width="60" align="center" />
-        <el-table-column label="公司名称" prop="companyName" align="center" />
-        <el-table-column label="操作" align="center" width="120">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              @click="handleInputAmount(scope.row)"
-              v-hasPermi="['course:period:setCourseRedPacket']"
-            >设置红包</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-<!--      <div slot="footer" class="dialog-footer">-->
-<!--      </div>-->
-<!--    </el-dialog>-->
+    <!--    <el-dialog title="设置红包" :visible.sync="companyDialogVisible" width="800px" append-to-body>-->
+    <el-table :data="companyList" border @selection-change="handleSelectionCompany">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column type="index" label="序号" width="60" align="center" />
+      <el-table-column label="公司名称" prop="companyName" align="center" />
+      <el-table-column label="操作" align="center" width="120">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleInputAmount(scope.row)"
+            v-hasPermi="['course:period:setCourseRedPacket']"
+          >设置红包</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!--      <div slot="footer" class="dialog-footer">-->
+    <!--      </div>-->
+    <!--    </el-dialog>-->
 
     <!-- 课程红包设置弹窗 -->
     <el-dialog title="设置红包金额" :visible.sync="courseDialogVisible" width="1200px" append-to-body>
@@ -31,7 +43,7 @@
           <template slot-scope="scope">
             <el-input-number
               v-model="scope.row.amount"
-              :min="0.1"
+              :min="0.0"
               :precision="2"
               :step="0.01"
               size="small"
@@ -47,11 +59,44 @@
         <el-button type="primary" @click="handleSave">保 存</el-button>
       </div>
     </el-dialog>
+
+    <!-- 课程红包设置弹窗 -->
+    <el-dialog title="设置红包金额" :visible.sync="batchRedPacketDialog.visible" width="400px" append-to-body>
+      <el-form ref="batchRedPacketForm" :model="batchRedPacketDialog.form" label-width="100px">
+        <el-form-item label="红包金额" prop="amount" :rules="{required: true, message: '红包金额不能为空', trigger: 'blur'}">
+          <div style="display: inline-flex; align-items: center">
+            <el-input-number
+              v-model="batchRedPacketDialog.form.amount"
+              :min="0.1"
+              :precision="2"
+              :step="0.01"
+              size="small"
+            >
+            </el-input-number>
+            <span style="margin-left: 10px">元</span>
+          </div>
+          <div style="color: rgba(169,88,18,0.9)">金额低于0.1元将自动置为0.1元</div>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="batchRedPacketDialog.visible = false">取 消</el-button>
+        <el-button type="primary"
+                   :loading="batchRedPacketDialog.saveLoading"
+                   :disabled="batchRedPacketDialog.saveLoading"
+                   @click="handleChange">保 存</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
-import { getPeriodCompanyList, batchSaveRedPacket, getPeriodRedPacketList } from "@/api/course/userCoursePeriod";
+import {
+  getPeriodCompanyList,
+  batchSaveRedPacket,
+  getPeriodRedPacketList,
+  batchSaveRedPacketByCompany
+} from "@/api/course/userCoursePeriod";
 import redPacket from "@/views/course/userCoursePeriod/redPacket.vue";
 
 export default {
@@ -86,7 +131,15 @@ export default {
       courseDialogVisible: false,
       companyList: [],
       redPacketList: [],
-      currentCompany: null
+      currentCompany: null,
+      selectCompanyIds: [],
+      batchRedPacketDialog: {
+        visible: false,
+        form: {
+          amount: 0.1
+        },
+        saveLoading: false,
+      }
     };
   },
   created() {
@@ -130,23 +183,23 @@ export default {
       }).then(response => {
         this.redPacketList = (response.data || []).map(item => ({
           ...item,
-          amount: item.amount || 0.1
+          amount:item.amount ?? 0.1
         }));
       });
     },
     // 保存红包金额
     handleSave() {
       // 筛选出有金额的项目
-      const validAmountItems = this.redPacketList.filter(item => item.amount > 0);
+      const validAmountItems = this.redPacketList.filter(item => item.amount >= 0);
       if (validAmountItems.length === 0) {
         this.$message.warning('请至少设置一个红包金额');
         return;
       }
 
       // 验证金额范围
-      const invalidItems = validAmountItems.filter(item => item.amount < 0.1);
+      const invalidItems = validAmountItems.filter(item => item.amount < 0.0);
       if (invalidItems.length > 0) {
-        this.$message.error('红包金额需要大于等于0.1元');
+        this.$message.error('红包金额需要大于等于0元');
         return;
       }
 
@@ -169,7 +222,45 @@ export default {
       }).catch(error => {
         this.$message.error("保存失败:" + error.message);
       });
-    }
+    },
+    handleSelectionCompany(selection) {
+      this.selectCompanyIds = selection.map(item => item.companyId);
+    },
+    handleChangeRedPacket() {
+      this.batchRedPacketDialog.visible = true
+      this.$refs.batchRedPacketForm.resetFields()
+    },
+    handleChange() {
+      if (!this.selectCompanyIds.length) {
+        this.$message.warning('请选择公司');
+        return;
+      }
+
+      this.$refs.batchRedPacketForm.validate((valid) => {
+        if (!valid) {
+          this.$message.warning('请填写正确的红包金额')
+          return;
+        }
+        this.batchRedPacketDialog.saveLoading = true
+
+        const saveData = {
+          periodId: this.periodId,
+          companyIds: this.selectCompanyIds,
+          redPacketMoney: this.batchRedPacketDialog.form.amount
+        }
+        batchSaveRedPacketByCompany(saveData).then(response => {
+          const {code, msg} = response
+          if (code === 200) {
+            this.$message.success('保存成功');
+            this.batchRedPacketDialog.visible = false;
+            this.$emit('success');
+          } else {
+            this.$message.error(msg || "保存失败");
+          }
+          this.batchRedPacketDialog.saveLoading = false
+        })
+      });
+    },
   }
 };
 </script>

+ 4 - 4
src/views/course/userVideo/index.vue

@@ -236,7 +236,7 @@
         <el-form-item label="视频描述" prop="description">
           <el-input v-model="form.description" type="textarea" :rows="2"  placeholder="请输入内容" />
         </el-form-item>
-        <el-form-item label="关联达人" prop="talentId" >
+        <el-form-item label="关联达人" >
           <el-select v-model="form.talentId" remote filterable reserve-keyword placeholder="输入手机号搜索" :remote-method="talentMethod" clearable >
             <el-option
               v-for="item in talentList"
@@ -543,9 +543,9 @@ export default {
         title: [
           { required: true, message: "短视频标题不能为空", trigger: "blur" }
         ],
-        talentId: [
-          { required: true, message: "关联达人不能为空", trigger: "change" }
-        ],
+        // talentId: [
+        //   { required: true, message: "关联达人不能为空", trigger: "change" }
+        // ],
         thumbnail: [
           { required: true, message: "请上传视频封面", trigger: "blur" }
         ]

+ 47 - 0
src/views/his/company/index.vue

@@ -203,6 +203,9 @@
          <el-form-item  label="管理员密码" prop="password" v-if="form.companyId==null">
           <el-input type="password" v-model="form.password" placeholder="请输入管理员密码" />
         </el-form-item>
+      <el-form-item label="掉线通知群名" prop="groupName">
+        <el-input v-model="form.groupName" :maxlength="15" placeholder="请输入掉线通知群名" />
+      </el-form-item>
         <el-form-item label="地址" prop="companyAddress">
           <el-input v-model="form.companyAddress" placeholder="请输入地址" />
         </el-form-item>
@@ -308,6 +311,38 @@
             :value="item.appId"
           />
         </el-select>
+      </el-form-item>
+      <el-form-item label="主要小程序" prop="miniAppMaster" >
+        <el-select
+          v-model="form.miniAppMaster"
+          multiple
+          :multiple-limit="1"
+          placeholder="请选择"
+          clearable
+          size="small">
+          <el-option
+            v-for="item in miniAppList"
+            :key="item.appId"
+            :label="item.appName"
+            :value="item.appId"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="备用小程序" prop="miniAppServer" >
+        <el-select
+          v-model="form.miniAppServer"
+          multiple
+          :multiple-limit="1"
+          placeholder="请选择"
+          clearable
+          size="small">
+          <el-option
+            v-for="item in miniAppList"
+            :key="item.appId"
+            :label="item.appName"
+            :value="item.appId"
+          />
+        </el-select>
       </el-form-item>
          <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" type="textarea"  :rows="2" placeholder="请输入备注" />
@@ -436,6 +471,8 @@ export default {
         restartTime: '13:10',
         courseMaAppId: null,
         courseMiniAppId: null,
+        miniAppMaster: [],
+        miniAppList: [],
       },
       // 表单校验
      rules: {
@@ -523,6 +560,13 @@ export default {
     cateList().then((response) => {
       this.cateList = response.rows;
     });
+    // getConfigByKey("courseMa.config").then(response => {
+    //   if(response.data && response.data.configValue) {
+    //     this.miniAppList = JSON.parse(response.data.configValue);
+    //   } else {
+    //     this.miniAppList = [];
+    //   }
+    // });
 	docList().then(response => {
 	    this.doctor=response.rows;
 	});
@@ -603,10 +647,13 @@ export default {
         restartTime: '13:10',
         balance: null,
         companyType: null,
+        groupName: null,
         userId: null,
         remark: null,
         linkName: null,
         limitUserCount: null,
+        miniAppMaster: [],
+        miniAppList: [],
         isDel: null,
         courseMaAppId: null,
         courseMiniAppId: null,

+ 95 - 24
src/views/his/storeOrder/order1.vue

@@ -310,7 +310,7 @@
       <el-form-item label="ERP账户" prop="erpAccount" v-if="SFDFopen">
         <el-select v-model="queryParams.erpAccount" placeholder="ERP账户" clearable size="small">
           <el-option
-            v-for="dict in erpAccountList"
+            v-for="dict in erpAccountQueryList"
             :key="dict"
             :label="dict"
             :value="dict"
@@ -364,6 +364,16 @@
             v-hasPermi="['his:storeOrder:exportDeliver']"
           >导入发货</el-button>
         </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="info"
+            plain
+            icon="el-icon-upload2"
+            size="mini"
+            @click="handleImportStatus"
+            v-hasPermi="['his:storeOrder:editImport']"
+          >导入订单状态</el-button>
+        </el-col>
         <el-col :span="1.5">
           <el-button
             type="info"
@@ -589,6 +599,34 @@
         <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog :title="uploadStatus.title" :visible.sync="uploadStatus.open" width="400px" append-to-body>
+        <el-upload
+          ref="uploadStatus"
+          :limit="1"
+          accept=".xlsx, .xls"
+          :headers="uploadStatus.headers"
+          :action="uploadStatus.url + '?updateSupport=' + upload.updateSupport"
+          :disabled="uploadStatus.isUploading"
+          :on-progress="handleFileUploadProgressOrder"
+          :on-success="handleFileSuccessOrder"
+          :auto-upload="false"
+          drag
+        >
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+          <div class="el-upload__tip text-center" slot="tip">
+            <div class="el-upload__tip" slot="tip">
+            </div>
+            <span>仅允许导入xls、xlsx格式文件。</span>
+            <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importUpdateOrderTemplate">下载模板</el-link>
+          </div>
+        </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitOrderStatusFileForm">确 定</el-button>
+        <el-button @click="uploadStatus.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
     
     <!-- 设置推送手机对话框 -->
     <el-dialog :title="erpPhone.title" :visible.sync="erpPhone.open" width="600px" append-to-body>
@@ -721,7 +759,7 @@
 
 <script>
 import { listOrder, getOrder, delOrder, addOrder,importExpressTemplate, updateOrder, exportOrder,importTemplate,exportOrder2,queryErpPhone,
-  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount,batchSetErpOrder } from "@/api/his/storeOrder";
+  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount,batchSetErpOrder,importUpdateOrderTemplate } from "@/api/his/storeOrder";
 import storeOrderDetails from '../../components/his/storeOrderDetails.vue';
 import { getToken } from "@/utils/auth";
 import {listStore} from "@/api/his/storeProduct";
@@ -738,13 +776,6 @@ export default {
     // 监听deptId
     'deptId': 'currDeptChange'
   },
-  // computed: {
-  //   // 计算选中账户的详细信息
-  //   selectedAccountInfo() {
-  //     if (!this.erpAccountForm.selectedAccount) return null;
-  //     return this.erpAccountList.find(account => account.id === this.erpAccountForm.selectedAccount);
-  //   }
-  // },
   data() {
     return {
       // 新增排序相关数据
@@ -784,8 +815,9 @@ export default {
         submitting: false
       },
       erpAccountList: [], // ERP账户列表
+      erpAccountQueryList:[], // ERP账户查询条件列表
       erpAccountForm: {
-        selectedAccount: null // 选中的账户ID
+        selectedAccount: [] // 选中的账户ID
       },
       orderSummary: null, // 订单统计信息
       erpPhoneValue:[],
@@ -837,6 +869,20 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/his/storeOrder/importData"
       },
+      uploadStatus: {
+        // 是否显示弹出层
+        open: false,
+        // 弹出层标题
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/his/storeOrder/importOrderStatusData"
+      },
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -924,7 +970,7 @@ export default {
         isFirst:null,
 		    source:null,
         companyId:null,
-        companyIds:null
+        companyIds:null,
       },
       // 表单参数
       form: {},
@@ -1008,7 +1054,6 @@ export default {
           this.deliveryStatusOptions = response.data;
     });
     this.getErpAccountList();
-
   },
   methods: {
     // 新增排序处理方法
@@ -1243,32 +1288,34 @@ export default {
     // 设置erp账户
     showErpAccountSetDialog() {
       this.erpAccountDialog.open = true;
-      // this.erpAccountDialog.loading = true;
       this.erpSettingType = 'set'
-      // this.getErpAccountList();
       this.calculateOrderSummary();
     },
     //显示ERP账户选择对话框
     showErpAccountDialog() {
       this.erpAccountDialog.open = true;
-      // this.erpAccountDialog.loading = true;
       this.erpSettingType = 'push'
-      // this.getErpAccountList();
       this.calculateOrderSummary();
     },
     
     //获取ERP账户列表
     async getErpAccountList() {
-    // getErpAccountList() {  
       try {
         const response = await getErpAccount();
-        // const response = getErpAccount();
         if (response.code === 200) {
-          this.erpAccountList = response.data || [];
+          const list = response.data || [];
+          this.erpAccountList = [...list];
+          this.erpAccountQueryList = [...list, '未分拣'];
+          // 设置默认值:第一条真实账户
+          if (list.length && !this.queryParams.erpAccount) {
+              this.$set(this.queryParams, 'erpAccount', list[0]);
+              this.getList();
+          }
         } else {
           this.$message.error(response.msg || '获取ERP账户列表失败');
           this.erpAccountList = [];
         }
+        
       } catch (error) {
         console.error('获取ERP账户列表失败:', error);
         this.$message.error('获取ERP账户列表失败');
@@ -1389,7 +1436,7 @@ export default {
         if (response.code === 200) {
           this.$message.success('订单ERP账号设置成功');
           this.cancelErpAccountDialog();
-          this.getList(); // 刷新列表
+          this.getErpAccountList(); // 刷新列表
         } else {
           this.$message.error(response.msg || 'ERP账号设置失败');
         }
@@ -1449,7 +1496,7 @@ export default {
         if (response.code === 200) {
           this.$message.success('ERP订单创建成功');
           this.cancelErpAccountDialog();
-          this.getList(); // 刷新列表
+          this.getErpAccountList(); // 刷新列表
         } else {
           this.$message.error(response.msg || 'ERP订单创建失败');
         }
@@ -1663,6 +1710,10 @@ export default {
         handleFileUploadProgressExpress(event, file, fileList) {
           this.upload.isUploading = true;
         },
+        // 文件上传中处理
+        handleFileUploadProgressOrder(event, file, fileList) {
+          this.uploadStatus.isUploading = true;
+        },
         // 文件上传成功处理
         handleFileSuccessExpress(response, file, fileList) {
           this.importExpress.open = false;
@@ -1671,14 +1722,26 @@ export default {
           this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
           this.getList();
         },
+         // 文件上传成功处理
+         handleFileSuccessOrder(response, file, fileList) {
+          this.uploadStatus.open = false;
+          this.uploadStatus.isUploading = false;
+          this.$refs.uploadStatus.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+        },
+        
         // 提交上传文件
         submitFileFormExpress() {
           this.$refs.importExpress.submit();
         },
 
-
-    /** 导入按钮操作 */
-    handleImport() {
+      handleImportStatus() {
+        this.uploadStatus.title = "导入";
+        this.uploadStatus.open = true;
+       },
+      /** 导入按钮操作 */
+      handleImport() {
         this.upload.title = "导入";
         this.upload.open = true;
        },
@@ -1689,6 +1752,11 @@ export default {
           this.download(response.msg);
         });
       },
+      importUpdateOrderTemplate(){
+        importUpdateOrderTemplate().then(response => {
+          this.download(response.msg);
+        });
+      },
       // 文件上传中处理
       handleFileUploadProgress(event, file, fileList) {
         this.upload.isUploading = true;
@@ -1705,6 +1773,9 @@ export default {
       submitFileForm() {
         this.$refs.upload.submit();
       },
+      submitOrderStatusFileForm(){
+        this.$refs.uploadStatus.submit();
+      },
     handledetails(row){
         this.show.open=true;
         setTimeout(() => {

+ 1 - 1
src/views/his/user/indexProject.vue

@@ -693,7 +693,7 @@ export default {
       var that=this;
       that.show.open=true;
       setTimeout(() => {
-        that.$refs.storeUserDetails.getDetails(row.userId);
+        that.$refs.userDetailsByNew.getDetails(row.userId);
       }, 200);
     },
     /** 更换会员归属按钮操作 */

+ 364 - 0
src/views/hisStore/companyUser/index.vue

@@ -0,0 +1,364 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="推广员" prop="nickName">
+            <el-input v-model="queryParams.nickName" placeholder="请输入" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="手机号码" prop="phonenumber">
+            <el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
+          </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="dict in statusOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="dateRange" 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>
+        <el-button type="cyan" 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-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['company:companyUser:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['company:companyUser:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['company:companyUser:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['company:companyUser:export']"
+        >导出</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" border :data="companyUserList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="ID" align="center" prop="userId" :show-overflow-tooltip="true" />
+          <el-table-column label="推广员编号" align="center" prop="userName" :show-overflow-tooltip="true" />
+          <el-table-column label="推广员姓名" align="center" prop="nickName" :show-overflow-tooltip="true"  />
+          <!-- <el-table-column label="部门" align="center" prop="dept.deptName" :show-overflow-tooltip="true" /> -->
+          <el-table-column label="手机号码" align="center" prop="phonenumber" width="120" />
+          <el-table-column label="状态" align="center">
+            <template slot-scope="scope">
+              <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间"  sortable align="center" prop="createTime" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button v-if="scope.row.userType !== '00'" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['company:user:edit']">修改</el-button>
+              <el-button v-if="scope.row.userType !== '00'" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['company:user:remove']">删除</el-button>
+              <el-button size="mini" type="text" icon="el-icon-key" @click="handleResetPwd(scope.row)" v-hasPermi="['company:user:resetPwd']">重置</el-button>
+            </template>
+          </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改企业员工信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户账号" prop="userName">
+          <el-input v-model="form.userName" placeholder="请输入用户账号" />
+        </el-form-item>
+        <el-form-item label="用户昵称" prop="nickName">
+          <el-input v-model="form.nickName" placeholder="请输入用户昵称" />
+        </el-form-item>
+        <el-form-item label="用户类型" prop="userType">
+          <el-select v-model="form.userType" placeholder="请选择用户类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户邮箱" prop="email">
+          <el-input v-model="form.email" placeholder="请输入用户邮箱" />
+        </el-form-item>
+        <el-form-item label="手机号码" prop="phonenumber">
+          <el-input v-model="form.phonenumber" placeholder="请输入手机号码" />
+        </el-form-item>
+        <el-form-item label="用户性别" prop="sex">
+          <el-select v-model="form.sex" placeholder="请选择用户性别">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="头像地址" prop="avatar">
+          <el-input v-model="form.avatar" placeholder="请输入头像地址" />
+        </el-form-item>
+        <el-form-item label="密码" prop="password">
+          <el-input v-model="form.password" placeholder="请输入密码" />
+        </el-form-item>
+        <el-form-item label="帐号状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="最后登录IP" prop="loginIp">
+          <el-input v-model="form.loginIp" placeholder="请输入最后登录IP" />
+        </el-form-item>
+        <el-form-item label="最后登录时间" prop="loginDate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.loginDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择最后登录时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="备注" prop="openId">
+          <el-input v-model="form.openId" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="身份证号" prop="idCard">
+          <el-input v-model="form.idCard" placeholder="请输入身份证号" />
+        </el-form-item>
+        <el-form-item label="公司ID" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入公司ID" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCompanyUser, getCompanyUser, delCompanyUser, addCompanyUser, updateCompanyUser, exportCompanyUser } from "@/api/company/companyUser";
+
+export default {
+  name: "HisCompanyUser",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 企业员工信息表格数据
+      companyUserList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptId: null,
+        userName: null,
+        nickName: null,
+        userType: null,
+        email: null,
+        phonenumber: null,
+        sex: null,
+        avatar: null,
+        password: null,
+        status: null,
+        loginIp: null,
+        loginDate: null,
+        openId: null,
+        idCard: null,
+        companyId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        userName: [
+          { required: true, message: "用户账号不能为空", trigger: "blur" }
+        ],
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询企业员工信息列表 */
+    getList() {
+      this.loading = true;
+      listCompanyUser(this.queryParams).then(response => {
+        this.companyUserList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: null,
+        deptId: null,
+        userName: null,
+        nickName: null,
+        userType: null,
+        email: null,
+        phonenumber: null,
+        sex: null,
+        avatar: null,
+        password: null,
+        status: "0",
+        delFlag: null,
+        loginIp: null,
+        loginDate: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null,
+        openId: null,
+        idCard: null,
+        companyId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加企业员工信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids
+      getCompanyUser(userId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改企业员工信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != null) {
+            updateCompanyUser(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            addCompanyUser(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$confirm('是否确认删除企业员工信息编号为"' + userIds + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delCompanyUser(userIds);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有企业员工信息数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportCompanyUser(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 63 - 0
src/views/hisStore/components/IllnessLibraryDetails.vue

@@ -0,0 +1,63 @@
+<template>
+    <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
+      <div style="padding: 20px; background-color: #fff;">
+         中医疾病详情
+      </div>
+<div class="contentx" v-if="item!=null">
+        <div class="desct"> 中医疾病信息</div>
+        <el-descriptions title="" :column="3" border>
+          <el-descriptions-item label="疾病名称"><span v-if="item!=null">{{item.illnessName}}</span></el-descriptions-item>
+          <el-descriptions-item label="舌脉"><span v-if="item!=null">{{item.tongueVein}}</span></el-descriptions-item>
+          <el-descriptions-item label="治法"><span v-if="item!=null">{{item.therapy}}</span></el-descriptions-item>
+           <el-descriptions-item label="症状"><span v-if="item!=null">{{item.symptom}}</span></el-descriptions-item>
+          <el-descriptions-item label="方剂名称"><span v-if="item!=null">{{item.formulaName}}</span></el-descriptions-item>
+          <el-descriptions-item label="方剂详情"><span v-if="item!=null">{{item.formulaDescs}}</span></el-descriptions-item>
+        </el-descriptions>
+    </div>
+    </div>
+</template>
+
+<script>
+import { listillnessLibrary, getillnessLibrary, delillnessLibrary, addillnessLibrary, updateillnessLibrary, exportillnessLibrary } from "@/api/hisStore/illnessLibrary";
+  export default {
+    name: "IllnessLibrary",
+    props:["data"],
+    data() {
+      return {
+        item:null,
+      }
+    },
+    created() {
+    },
+    methods: {
+      getDetails(orderId) {
+        this.item=null;
+        getillnessLibrary(orderId).then(response => {
+            this.item = response.data;
+        });
+      },
+    }
+  }
+</script>
+<style>
+  .contentx{
+      height: 100%;
+      background-color: #fff;
+      padding: 0px 20px 20px;
+      margin: 20px;
+  }
+  .el-descriptions-item__label.is-bordered-label{
+    font-weight: normal;
+  }
+  .el-descriptions-item__content {
+    max-width: 150px;
+    min-width: 100px;
+  }
+  .desct{
+      padding-top: 20px;
+      padding-bottom: 20px;
+      color: #524b4a;
+      font-weight: bold;
+    }
+
+</style>

+ 109 - 0
src/views/hisStore/components/addBatchPublish.vue

@@ -0,0 +1,109 @@
+<template>
+    <div>
+            <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+                <el-form-item label="优惠券数量" >
+                    {{ids.length}}个
+                </el-form-item>
+                <el-form-item label="优惠券开始时间" prop="startTime">
+                <el-date-picker clearable size="small" style="width: 200px"
+                    v-model="form.startTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择开始时间">
+                </el-date-picker>
+                </el-form-item>
+                <el-form-item label="优惠券结束时间" prop="limitTime">
+                <el-date-picker clearable size="small" style="width: 200px"
+                    v-model="form.limitTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择结束时间">
+                </el-date-picker>
+                </el-form-item>
+                <el-form-item label="优惠券领取数量" prop="totalCount">
+                <el-input-number v-model="form.totalCount" :min="0" placeholder="请输入优惠券领取数量" />
+                </el-form-item>
+            </el-form>
+             <div   class="footer">
+            <el-button type="primary" @click="submitForm">确 定</el-button>
+            <el-button @click="cancel">取 消</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { batchPublishCoupon  } from "@/api/hisStore/storeCoupon";
+export default {
+        name: "batchPublish",
+        data() {
+            return {
+                statusOptions:[],
+                ids:[],
+                // 表单参数
+                form: {},
+                // 表单校验
+                rules: {
+                    totalCount: [
+                    { required: true, message: "数量不能为空", trigger: "blur" }
+                    ],
+                    startTime: [
+                    { required: true, message: "开始时间不能为空", trigger: "blur" }
+                    ],
+                    limitTime: [
+                    { required: true, message: "结束时间不能为空", trigger: "blur" }
+                    ],
+                }
+            };
+        },
+        created() {
+
+        },
+        methods: {
+            cancel(){
+                this.$emit('close');
+            },
+            handleBatch(ids) {
+                console.log(ids)
+                this.ids=ids;
+
+            },
+            /** 提交按钮 */
+            submitForm() {
+                this.$refs["form"].validate(valid => {
+                    if (valid) {
+                        this.myloading = this.$loading({
+                            lock: true,
+                            text: '处理中...',
+                            spinner: 'el-icon-loading',
+                            background: 'rgba(0, 0, 0, 0.7)'
+                        });
+                        this.form.ids=this.ids.toString();
+                        batchPublishCoupon(this.form).then(response => {
+                            this.myloading.close()
+                            if (response.code === 200) {
+                                this.msgSuccess("发布成功");
+                                this.$emit('close');
+                            }
+                        });
+                    }
+                });
+            },
+        }
+    };
+</script>
+<style lang="scss" scoped>
+.contents{
+    height: 100%;
+    background-color: #fff;
+    padding: 20px;
+
+}
+.footer{
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+}
+</style>
+
+
+

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio