packageDetails.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
  3. <div style="padding: 20px; background-color: #fff;">
  4. 套餐包详情
  5. </div>
  6. <div class="content" v-if="item!=null">
  7. <div class="desct">
  8. 套餐包信息
  9. </div>
  10. <el-descriptions title="" :column="3" border>
  11. <el-descriptions-item label="套餐包名称" >
  12. <span v-if="item!=null">{{item.packageName}}</span>
  13. </el-descriptions-item>
  14. <el-descriptions-item label="状态" >
  15. <dict-tag :options="statusOptions" :value="item.status"/>
  16. </el-descriptions-item>
  17. <el-descriptions-item label="类型" >
  18. <dict-tag :options="packageTypeOptions" :value="item.packageType"/>
  19. </el-descriptions-item>
  20. <el-descriptions-item label="子类型" >
  21. <dict-tag :options="packageSubTypeOptions" :value="item.packageSubType"/>
  22. </el-descriptions-item>
  23. <el-descriptions-item label="疾病类型" >
  24. <dict-tag :options="diseaseTypeOptions" :value="item.diseaseType"/>
  25. </el-descriptions-item>
  26. <el-descriptions-item label="总价 元/天" >
  27. <span v-if="item!=null">{{item.price}}</span>
  28. </el-descriptions-item>
  29. <el-descriptions-item label="套餐价" >
  30. <span v-if="item!=null">{{item.totalPrice}}</span>
  31. </el-descriptions-item>
  32. <el-descriptions-item label="周期" >
  33. <span v-if="item!=null">{{item.cycle}}</span>
  34. </el-descriptions-item>
  35. <el-descriptions-item label="签约时长" >
  36. <span v-if="item!=null">{{item.duration}}</span>
  37. </el-descriptions-item>
  38. <el-descriptions-item label="是否展示" >
  39. <dict-tag :options="orOptions" :value="item.isShow"/>
  40. </el-descriptions-item>
  41. <el-descriptions-item label="排序" >
  42. <span v-if="item!=null">{{item.sort}}</span>
  43. </el-descriptions-item>
  44. <el-descriptions-item label="套餐医生" >
  45. <span v-if="item!=null">{{item.doctors}}</span>
  46. </el-descriptions-item>
  47. <el-descriptions-item label="创建时间" >
  48. <span v-if="item!=null">{{item.createTime}}</span>
  49. </el-descriptions-item>
  50. <el-descriptions-item label="修改时间" >
  51. <span v-if="item!=null">{{item.updateTime}}</span>
  52. </el-descriptions-item>
  53. <el-descriptions-item label="封面图" >
  54. <el-image v-for="img in item.imgUrl" :key="img"
  55. style="width: 100px"
  56. :src="img"
  57. :preview-src-list="[img]">
  58. </el-image>
  59. </el-descriptions-item>
  60. <el-descriptions-item label="所属小程序">
  61. <el-tag
  62. v-for="name in appNames"
  63. :key="name"
  64. style="margin-right: 4px"
  65. >
  66. {{ name }}
  67. </el-tag>
  68. </el-descriptions-item>
  69. </el-descriptions>
  70. </div>
  71. <div class="content" v-if="item!=null">
  72. <div class="desct">
  73. 商品内容
  74. </div>
  75. <el-table border width="100%" style="margin-top:5px;" :data="productJson">
  76. <el-table-column label="商品图片" align="center" width="100">
  77. <template slot-scope="scope">
  78. <el-popover
  79. placement="right"
  80. title=""
  81. trigger="hover">
  82. <img slot="reference" :src="scope.row.image" width="50">
  83. <img :src="scope.row.image" style="max-width: 50px;">
  84. </el-popover>
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="商品名称" show-overflow-tooltip align="center" prop="productName" />
  88. <el-table-column label="数量" align="center" prop="count" width="150px" />
  89. <el-table-column label="服用方法" align="center" prop="usageMethod" width="150px" />
  90. <el-table-column label="一日几次" align="center" prop="usageFrequencyUnit" width="150px" />
  91. <el-table-column label="商品编号" align="center" prop="barCode" />
  92. <el-table-column label="商品规格" align="center" prop="sku" />
  93. <el-table-column label="售价" align="center" prop="price" >
  94. <template slot-scope="scope">
  95. <div v-if="scope.row.price!=null">
  96. {{scope.row.price.toFixed(2)}}
  97. </div>
  98. </template>
  99. </el-table-column>
  100. <el-table-column label="小计" align="center" prop="money" >
  101. <template slot-scope="scope">
  102. <div v-if="scope.row.money!=null">
  103. {{scope.row.money.toFixed(2)}}
  104. </div>
  105. </template>
  106. </el-table-column>
  107. </el-table>
  108. </div>
  109. <div class="content" v-if="item!=null">
  110. <div class="desct">
  111. 套餐详情
  112. </div>
  113. <span v-html="item.desc"></span>
  114. </div>
  115. </div>
  116. </template>
  117. <script>
  118. import { listPackage, getPackage, delPackage, addPackage, updatePackage, exportPackage } from "@/api/his/package";
  119. import {list as getAppMallOptions} from '@/api/course/coursePlaySourceConfig';
  120. export default {
  121. name: "patientdetails",
  122. props:["data"],
  123. data() {
  124. return {
  125. // 状态字典
  126. drugList:[],
  127. drugOpen:false,
  128. statusOptions: [],
  129. payTypeOptions: [],
  130. orOptions:[],
  131. packageTypeOptions: [],
  132. diseaseTypeOptions: [],
  133. appMallOptions:[],
  134. // 是否删除字典
  135. isDelOptions: [],
  136. packageSubTypeOptions:[],
  137. item:null,
  138. productJson:[],
  139. }
  140. },
  141. computed: {
  142. appNames() {
  143. if (!this.item.appIds) return [];
  144. const ids = this.item.appIds.split(',');
  145. return ids
  146. .map(id => this.appMallOptions.find(opt => opt.appid === id)?.name)
  147. .filter(Boolean); // 过滤掉找不到的
  148. }
  149. },
  150. created() {
  151. this.getDicts("sys_company_status").then(response => {
  152. this.statusOptions = response.data;
  153. });
  154. this.getDicts("sys_company_or").then(response => {
  155. this.isDelOptions = response.data;
  156. this.orOptions = response.data;
  157. });
  158. this.getDicts("sys_package_pay_type").then(response => {
  159. this.payTypeOptions = response.data;
  160. });
  161. this.getDicts("sys_product_type").then(response => {
  162. this.productTypeOptions = response.data;
  163. });
  164. this.getDicts("sys_package_type").then(response => {
  165. this.packageTypeOptions = response.data;
  166. });
  167. this.getDicts("sys_package_sub_type").then(response => {
  168. this.packageSubTypeOptions = response.data;
  169. });
  170. this.getDicts("sys_prescribe_disease_type").then(response => {
  171. this.diseaseTypeOptions = response.data;
  172. });
  173. this.getAppMallOptions();
  174. },
  175. methods: {
  176. getAppMallOptions() {
  177. getAppMallOptions({pageNum:1,pageSize:100,isMall:1}).then(response => {
  178. this.appMallOptions = response.rows;
  179. })
  180. },
  181. getDetails(orderId) {
  182. this.item=null;
  183. getPackage(orderId).then(response => {
  184. this.item = response.data;
  185. this.productJson=JSON.parse(response.data.productJson);
  186. this.item.imgUrl= (this.item.imgUrl).split(",");
  187. });
  188. },
  189. drug(row){
  190. this.drugList=row.row.drug
  191. this.drugOpen=true;
  192. },
  193. }
  194. }
  195. </script>
  196. <style>
  197. .el-descriptions-item__content {
  198. max-width: 150px;
  199. min-width: 100px;
  200. }
  201. .content{
  202. height: 100%;
  203. background-color: #fff;
  204. padding: 0px 20px 20px;
  205. margin: 20px;
  206. }
  207. .el-descriptions-item__label.is-bordered-label{
  208. font-weight: normal;
  209. }
  210. .desct{
  211. padding-top: 20px;
  212. padding-bottom: 20px;
  213. color: #524b4a;
  214. font-weight: bold;
  215. }
  216. </style>