You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1356 lines
50 KiB

3 years ago
3 years ago
3 years ago
3 years ago
5 months ago
2 years ago
3 years ago
5 months ago
2 years ago
3 years ago
2 years ago
5 months ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
5 months ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
5 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
4 months ago
3 years ago
3 years ago
5 months ago
3 years ago
3 years ago
3 years ago
5 months ago
3 years ago
2 years ago
3 years ago
5 months ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
5 months ago
3 years ago
5 months ago
2 years ago
3 years ago
3 years ago
3 years ago
5 months ago
3 years ago
4 months ago
3 years ago
4 months ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
5 months ago
2 years ago
5 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
5 months ago
5 months ago
5 months ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
5 months ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
5 months ago
3 years ago
2 years ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
5 months ago
2 years ago
2 years ago
5 months ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
5 months ago
2 years ago
3 years ago
2 years ago
3 years ago
5 months ago
2 years ago
3 years ago
5 months ago
3 years ago
5 months ago
3 years ago
5 months ago
3 years ago
2 years ago
5 months ago
3 years ago
2 years ago
3 years ago
5 months ago
2 years ago
3 years ago
5 months ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
4 months ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
5 months ago
3 years ago
5 months ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
5 months ago
3 years ago
5 months ago
2 years ago
5 months ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
5 months ago
2 years ago
5 months ago
3 years ago
5 months ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
5 months ago
3 years ago
2 years ago
5 months ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
5 months ago
2 years ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
2 years ago
2 years ago
5 months ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
  1. <template>
  2. <div style="display: flex; margin-left: 10px; margin-top: 10px;">
  3. <div style="width:220px;">
  4. <div>
  5. <span>项目类别</span>
  6. <el-cascader :options="dict.itemTypeTree" v-model="dataTransOpts.copyGroup.itemTypeIds" popper-class="example"
  7. style="margin-left: 3px;width:160px;"
  8. :props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" clearable filterable
  9. @change="changeItemType" size="small" :disabled="isComplete">
  10. </el-cascader>
  11. </div>
  12. <div class="mainareaBox">
  13. <el-table :data="dataTransOpts.copyGroup.asbItem" style="border-radius: 5px;" :height="tableHeight"
  14. @row-dblclick="dbClickChoosedAsb" highlight-current-row @selection-change="handleSelectionChange" size="small"
  15. :row-class-name="handleRowClassName" @row-click="chooseAsbItem">
  16. <!--
  17. <el-table-column type="selection" align="center" width="40" />
  18. -->
  19. <el-table-column prop="displayName" label="未选组合项目">
  20. <template slot-scope="scope">
  21. <div>
  22. <i class="el-icon-view" style="font-size: 14px;color: black;cursor: pointer;"
  23. @click="getAsbItems({ asbitemName: scope.row.displayName, asbitemId: scope.row.id })" />
  24. {{ scope.row.displayName }}
  25. </div>
  26. </template>
  27. </el-table-column>
  28. <!--
  29. <el-table-column prop="price" label="标准价格" width="70">
  30. <template slot-scope="scope">
  31. <div style="text-align: center;">{{ scope.row.price }}</div>
  32. </template>
  33. </el-table-column>
  34. <el-table-column prop="forSexId" label="适用性别" width="70">
  35. <template slot-scope="scope">
  36. <div style="text-align: center;">{{ ldddw(dict.forSex, "id", scope.row.forSexId, "displayName") }}</div>
  37. </template>
  38. </el-table-column>
  39. -->
  40. </el-table>
  41. </div>
  42. </div>
  43. <div style="width:100px;margin-top: 70px;">
  44. <div v-show="checkPagePriv(pagePriv.privs, '添加')" class="btnList">
  45. <el-button class="commonbutton" @click="addAbs(asbItemChoosed, 'choosed')" style="width:90px;"
  46. :disabled="isComplete">添加 <i class="el-icon-arrow-right"></i>
  47. </el-button>
  48. </div>
  49. <div v-show="checkPagePriv(pagePriv.privs, '全添加')" class="btnList">
  50. <el-button type="success" class="difference" @click="addAbs(asbItemChoosed, 'all')" style="width:90px;"
  51. :disabled="isComplete">全添加 <i class="el-icon-d-arrow-right"></i>
  52. </el-button>
  53. </div>
  54. <div v-show="checkPagePriv(pagePriv.privs, '移除')" class="btnList">
  55. <el-button type="warning" class="commonbutton" @click="delAbs(patientRegisterAbsChoosed, 'choosed')"
  56. style="width:90px;" :disabled="isComplete"><i class="el-icon-arrow-left"> 移除</i>
  57. </el-button>
  58. </div>
  59. <div v-show="checkPagePriv(pagePriv.privs, '全移除')" class="btnList">
  60. <el-button type="danger" class="difference" @click="delAbs(patientRegisterAbsChoosed, 'all')"
  61. style="width:90px;" :disabled="isComplete"><i class="el-icon-d-arrow-left"> 全移除</i>
  62. </el-button>
  63. </div>
  64. <!-- 不显示保存当已选组合有修改时失去焦点自动保存
  65. <div class="btnList">
  66. <el-button type="success" @click="onSubmit('保存')">保存 <i class="el-icon-check"></i>
  67. </el-button>
  68. </div>
  69. -->
  70. </div>
  71. <div :style="'width:' + (window.pageWidth - 110 - 20 - 230 - 100) + 'px;'">
  72. <div style="display: flex;">
  73. <div class="disTotal">
  74. <el-tooltip class="item" effect="dark" content="根据输入的折扣,自动计算折后总价" placement="top">
  75. <span>折扣 </span>
  76. </el-tooltip>
  77. <el-input style="width:55px;" v-model="discount" size="small" type="number" @input="changeAllDiscount"
  78. @focus="discountFoucs = true" @blur="discountFoucs = false" />
  79. </div>
  80. <div class="disTotal">
  81. <el-tooltip class="item" effect="dark" content="总金额即该人员此次体检实收金额,并根据此金额自动计算折扣" placement="top">
  82. <span>总金额 </span>
  83. </el-tooltip>
  84. <el-input style="width:70px;" v-model="total" size="small" type="number" @input="changeTotal" ref="total"
  85. @focus="totalFoucs = true" @blur="totalFoucs = false" />
  86. </div>
  87. <div class="disTotal">
  88. <el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small" filterable :filter-method="filterMethod"
  89. :disabled="isComplete" clearable @clear="quickAsb = deepCopy(asbItemQuick)" @change="quickChoosedAsb"
  90. default-first-option ref="quickAsbOCX" style="width:240px;text-align: left;padding-right: 15px;">
  91. <el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />
  92. </el-select>
  93. </div>
  94. </div>
  95. <div class="mainareaBox">
  96. <el-table :data="dataTransOpts.tableM.register_check_asbitem" highlight-current-row border
  97. ref="patientRegister_patientRegisterAbs" style="border-radius: 5px;" :height="tableHeight" width="100%"
  98. :summary-method="getSummaries" show-summary :row-class-name="handleRowClassName" @row-dblclick="removeAbs"
  99. @selection-change="selecteditems" size="small" @row-click="removeAsbItem">
  100. <!-- temporaryselection personnelUnit.nogroupselected-->
  101. <!-- 取消勾选换成选中
  102. <el-table-column type="selection" align="center"/>
  103. -->
  104. <el-table-column label="已选组合项目" min-width="150" prop="asbitemName">
  105. <template slot-scope="scope">
  106. <div>
  107. <i class="el-icon-view" style="font-size: 14px;color: black;cursor: pointer;"
  108. @click="getAsbItems(scope.row)" />
  109. <el-tooltip class="item" effect="dark" content="标五角星表示属于分组或套餐的项目" placement="top">
  110. <i v-if="scope.row.isBelongGroupPackage == 'Y'" class="el-icon-star-on"
  111. style="padding: 3px; font-size: 14px;color: purple;" />
  112. </el-tooltip>
  113. {{ scope.row.asbitemName }}
  114. </div>
  115. </template>
  116. </el-table-column>
  117. <el-table-column label="标准价" prop="standardPrice" min-width="60" align="center" />
  118. <el-table-column label="折扣" prop="discount" min-width="60">
  119. <template slot-scope="scope">
  120. <el-input type="number" v-model="scope.row.discount" size="small" @input="changeDiscount(scope.$index)" :disabled="scope.row.isCharge == 'Y' ? true:false"/>
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="数量" prop="amount" min-width="50">
  124. <template slot-scope="scope">
  125. <el-input type="number" v-model="scope.row.amount" size="small" @input="changeDiscount(scope.$index)" :disabled="scope.row.isCharge == 'Y' ? true:false"/>
  126. </template>
  127. </el-table-column>
  128. <el-table-column label="应收价格" prop="chargePrice" min-width="70">
  129. <template slot-scope="scope">
  130. <el-input type="number" v-model="scope.row.chargePrice" size="small" @input="changePrice(scope.$index)" :disabled="scope.row.isCharge == 'Y' ? true:false"/>
  131. <!--立即触发保存 @blur="onSubmit('')" -->
  132. </template>
  133. </el-table-column>
  134. <el-table-column prop="total" label="应收金额" min-width="70" align="center" />
  135. <el-table-column prop="standTotal" label="标准金额" min-width="70" v-if="false" />
  136. <el-table-column label="支付方式" prop="payTypeFlag" width="80">
  137. <template slot-scope="scope">
  138. <el-select v-model="scope.row.payTypeFlag" size="small">
  139. <el-option v-for="item in dict.payType" :key="item.id" :label="item.displayName" :value="item.id" />
  140. </el-select>
  141. </template>
  142. </el-table-column>
  143. <el-table-column prop="isCharge" label="收费" min-width="40" align="center">
  144. <template slot-scope="scope">
  145. <el-checkbox :value="scope.row.isCharge == 'Y'" true-label="Y" false-label="N" />
  146. </template>
  147. </el-table-column>
  148. <el-table-column prop="checkCompleteFlag" label="状态" min-width="40" align="center">
  149. <template slot-scope="scope">
  150. <div :style="`color: ${setColor(scope.row.checkCompleteFlag)}`">
  151. {{ dddw(dict.checkCompleteFlag, "id", scope.row.checkCompleteFlag, "displayName") }}
  152. </div>
  153. </template>
  154. </el-table-column>
  155. <el-table-column prop="isLock" label="锁" min-width="40" align="center">
  156. <template slot-scope="scope">
  157. <el-checkbox :value="scope.row.isLock == 'Y'" true-label="Y" false-label="N" />
  158. </template>
  159. </el-table-column>
  160. <el-table-column prop="creatorName" label="登记人" min-width="60" align="center"></el-table-column>
  161. <el-table-column prop="creationTime" label="登记日期" width="130" align="center">
  162. <template slot-scope="scope">
  163. <div>{{ scope.row.creationTime ? moment(scope.row.creationTime).format('yyyy-MM-DD HH:mm') : '' }}</div>
  164. </template>
  165. </el-table-column>
  166. </el-table>
  167. </div>
  168. <div style="position: absolute;bottom:28px;right:125px;font-size: 10px;">
  169. {{ asbDesc }}
  170. </div>
  171. </div>
  172. </div>
  173. </template>
  174. <script>
  175. import moment from 'moment';
  176. import { mapState, mapActions } from "vuex";
  177. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  178. import { getPagePriv, checkPagePriv, arrayFilter, arrayReduce, arrayExistObj, dddw, deepCopy, tcdate } from "../../utlis/proFunc";
  179. export default {
  180. props: ["prForm", "prAsbOpraOpts", "refreshFormId"],
  181. data() {
  182. return {
  183. pagePriv: {
  184. routeUrlorPageName: 'PatientRegisterEdit', //当前页面归属路由或归属页面权限名称
  185. privs: [] // 页面权限
  186. },
  187. LocalConfig: {
  188. patientRegister: {
  189. Edit: 'standard', //standard/qztl 人员登记组件版本
  190. editHeight: 0, // 相较与标准版,选组合项目组件,减少高度
  191. immediateToHisCharge: true, // 人员登记保存后,立即发送收费申请
  192. },
  193. },
  194. oldFormId: '', //配合登记人员复制新增使用
  195. itemType: [], //项目类别
  196. itemTypeIds: '', //被选中的项目类别ID
  197. // asbItem: [], //左侧显示的未选组合项目
  198. // asbItemAll: [], //所有未选组合项目
  199. asbItemChoosed: [], //勾选的 未选组合项目
  200. startPoint: -1,
  201. //patientRegisterAbs:[], //体检人员所选组合项目 放vuex
  202. patientRegisterAbsChoosed: [], //勾选的 体检人员所选组合项目
  203. PstartPoint: -1,
  204. //patientRegisterAbsDel: [], //体检人员 待删除的组合项目
  205. // prAsb:[], //当前显示的已选组合项目(新增与编辑的在一起)
  206. // prAsbDels:[], //待提交 删除的组合项目
  207. groupAsbs: [], //分组包含的项目
  208. packageAsbs: [], //套餐包含的项目
  209. asbItemId: '',
  210. discount: 100,
  211. total: 0,
  212. totalStand: 0,
  213. quickAsb: [],
  214. asbItemQuick: [],
  215. totalFoucs: false, //总价是否获取焦点
  216. discountFoucs: false, //总折扣是否获取焦点
  217. asbDesc: '', //所选套餐描述
  218. asbItems: [], // 组合项目包含明细(全)
  219. };
  220. },
  221. computed: {
  222. ...mapState(["window", "dataTransOpts", "dict", "customerOrg", "patientRegister", "personnelUnit"]),
  223. //是否总检
  224. isComplete() {
  225. return this.prForm.completeFlag == '3' ? true : false;
  226. },
  227. tableHeight() {
  228. let temph = this.window.pageHeight < 700 ? 700 : this.window.pageHeight
  229. return temph - 440 - this.LocalConfig.patientRegister.editHeight - (this.prForm.isPatientOccupationalDisease == 'Y' ? 32 : 0)
  230. }
  231. },
  232. created() {
  233. //获取用户当前页面的权限
  234. let userPriv = window.sessionStorage.getItem('userPriv')
  235. if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
  236. try {
  237. let LocalConfig = JSON.parse(window.localStorage.getItem('LocalConfig'))
  238. if (LocalConfig && LocalConfig.patientRegister) {
  239. if (LocalConfig.patientRegister.edit) this.LocalConfig.patientRegister.edit = LocalConfig.patientRegister.edit
  240. if (LocalConfig.patientRegister.editHeight) this.LocalConfig.patientRegister.editHeight = LocalConfig.patientRegister.editHeight
  241. }
  242. } catch (error) {
  243. console.log("window.localStorage.getItem('LocalConfig')", error)
  244. }
  245. this.dictInit()
  246. },
  247. updated() {
  248. this.$nextTick(() => {
  249. this.$refs['patientRegister_patientRegisterAbs'].doLayout()
  250. })
  251. },
  252. mounted() {
  253. console.log('getPrAsb mounted')
  254. this.getPrAsb(this.dataTransOpts.tableS.patient_register.id)
  255. },
  256. methods: {
  257. ...mapActions(['getCustomerOrgGroup', 'getPatientRegisterAbs']),
  258. dddw, moment, deepCopy, checkPagePriv,
  259. // 初始化字典信息
  260. dictInit() {
  261. // 项目类别 树结构
  262. getapi("/api/app/item-type/by-code-all").then((res) => {
  263. if (res.code != -1) {
  264. this.dict.itemTypeTree = res.data;
  265. tcdate(this.dict.itemTypeTree);
  266. }
  267. });
  268. // 获取组合项目
  269. postapi('/api/app/asbitem/GetBasicList', { isFilterActive: 'Y' }).then(res => {
  270. if (res.code != -1) {
  271. this.dataTransOpts.copyGroup.asbItem = res.data
  272. this.dataTransOpts.copyGroup.asbItemAll = res.data
  273. this.asbItemQuick = res.data
  274. this.quickAsb = res.data
  275. }
  276. });
  277. // 获取组合项目包含的明细
  278. postapi('/api/app/Asbitem/GetSimpleAsbitemWithDetails')
  279. .then(res => {
  280. if (res.code > -1) this.dataTransOpts.copyGroup.asbItems = res.data
  281. })
  282. },
  283. // 设置颜色
  284. setColor(checkCompleteFlag) {
  285. let color = "#52555F"
  286. switch (checkCompleteFlag) {
  287. case '0':
  288. color = "#FF5054"
  289. break;
  290. case '2':
  291. color = "#396FFA"
  292. break;
  293. default:
  294. break;
  295. }
  296. return color
  297. },
  298. // 获取人员组合项目信息
  299. getPrAsb(id) {
  300. // debugger
  301. // 清空待删除、分组、套餐
  302. console.log('getPrAsb(id)', `getPrAsb(${id})`)
  303. // this.prAsbDels = []
  304. this.groupAsbs = []
  305. this.packageAsbs = []
  306. if (!id) {
  307. this.dataTransOpts.tableM.register_check_asbitem = []
  308. this.refreshAsbitem()
  309. } else {
  310. getapi(`/api/app/registerasbitem/getlistinpatientregisterid?PatientRegisterId=${id}`).then(res => {
  311. if (res.code > -1) {
  312. res.data.forEach(e => {
  313. e.standTotal = e.amount * e.standardPrice
  314. e.total = e.amount * e.chargePrice
  315. });
  316. this.dataTransOpts.tableM.register_check_asbitem = res.data
  317. this.refreshAsbitem()
  318. }
  319. })
  320. }
  321. },
  322. // 复制新增 拷贝明细项目
  323. copyNew() {
  324. if (this.oldFormId) {
  325. getapi(`/api/app/registerasbitem/getlistinpatientregisterid?PatientRegisterId=${this.oldFormId}`).then(res => {
  326. if (res.code > -1) {
  327. this.dataTransOpts.tableM.register_check_asbitem = res.data
  328. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  329. e.standTotal = e.amount * e.standardPrice
  330. e.total = e.amount * e.chargePrice
  331. e.id = '';
  332. e.patientRegisterId = '';
  333. e.isCharge = 'N';
  334. e.checkCompleteFlag = '0'
  335. e.isLock = 'N'
  336. })
  337. this.refreshAsbitem()
  338. }
  339. })
  340. }
  341. },
  342. // 刷新未选组合项目
  343. refreshAsbitem() {
  344. let asbItemAll = deepCopy(this.dataTransOpts.copyGroup.asbItemAll)
  345. let choosedAsb = this.dataTransOpts.tableM.register_check_asbitem.filter(e => {
  346. return e.checkCompleteFlag == '0' || !(e.checkCompleteFlag)
  347. }) // 如果已经检查,则可以重新选进来(复查)
  348. arrayReduce(asbItemAll, choosedAsb, "id=asbitemId");
  349. this.changeItemType(deepCopy(this.itemTypeIds));
  350. this.asbItemQuick = deepCopy(asbItemAll);
  351. this.quickAsb = deepCopy(asbItemAll);
  352. },
  353. handleRowClassName({ row, rowIndex }) {
  354. if (row.choosed) {
  355. return 'current-row';
  356. } else {
  357. return '';
  358. }
  359. },
  360. //选择 未选的组合项目
  361. chooseAsbItem(row) {
  362. this.dataTransOpts.copyGroup.asbItem.forEach((e, index) => {
  363. e.index = index;
  364. return e
  365. });
  366. // 按住了shift键
  367. if (this.window.shift) {
  368. //清除所有选择
  369. this.dataTransOpts.copyGroup.asbItem.forEach(e => {
  370. e.choosed = false;
  371. return e
  372. });
  373. if (this.startPoint == - 1) {
  374. this.dataTransOpts.copyGroup.asbItem[row.index].choosed = true;
  375. this.startPoint = row.index;
  376. return
  377. }
  378. if (this.startPoint > row.index) {
  379. for (let i = row.index; i <= this.startPoint; i++) {
  380. this.dataTransOpts.copyGroup.asbItem[i].choosed = true
  381. }
  382. } else if (this.startPoint <= row.index) {
  383. for (let i = this.startPoint; i <= row.index; i++) {
  384. this.dataTransOpts.copyGroup.asbItem[i].choosed = true
  385. }
  386. }
  387. return
  388. }
  389. // 按住了ctrl 键
  390. if (this.window.ctrl) {
  391. console.log('this.window.ctrl', this.window.ctrl, this.dataTransOpts.copyGroup.asbItem)
  392. this.dataTransOpts.copyGroup.asbItem[row.index].choosed = true;
  393. this.startPoint = row.index;
  394. return
  395. }
  396. // 未按住了ctrl 、shift 键
  397. //清除所有选择
  398. //console.log('清除所有选择')
  399. this.dataTransOpts.copyGroup.asbItem.forEach(e => {
  400. e.choosed = false;
  401. return e
  402. });
  403. this.dataTransOpts.copyGroup.asbItem[row.index].choosed = true;
  404. this.startPoint = row.index;
  405. },
  406. //选择 已选的组合项目
  407. removeAsbItem(row) {
  408. this.dataTransOpts.tableM.register_check_asbitem.forEach((e, index) => {
  409. e.index = index;
  410. return e
  411. });
  412. // 按住了shift键
  413. if (this.window.shift) {
  414. //清除所有选择
  415. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  416. e.choosed = false;
  417. return e
  418. });
  419. if (this.PstartPoint == - 1) {
  420. this.dataTransOpts.tableM.register_check_asbitem[row.index].choosed = true;
  421. this.PstartPoint = row.index;
  422. return
  423. }
  424. if (this.PstartPoint > row.index) {
  425. for (let i = row.index; i <= this.PstartPoint; i++) {
  426. this.dataTransOpts.tableM.register_check_asbitem[i].choosed = true
  427. }
  428. } else if (this.PstartPoint <= row.index) {
  429. for (let i = this.PstartPoint; i <= row.index; i++) {
  430. this.dataTransOpts.tableM.register_check_asbitem[i].choosed = true
  431. }
  432. }
  433. return
  434. }
  435. // 按住了ctrl 键
  436. if (this.window.ctrl) {
  437. console.log('this.window.ctrl', this.window.ctrl, this.dataTransOpts.tableM.register_check_asbitem)
  438. this.dataTransOpts.tableM.register_check_asbitem[row.index].choosed = true;
  439. this.PstartPoint = row.index;
  440. return
  441. }
  442. // 未按住了ctrl 、shift 键
  443. //清除所有选择
  444. //console.log('清除所有选择')
  445. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  446. e.choosed = false;
  447. return e
  448. });
  449. this.dataTransOpts.tableM.register_check_asbitem[row.index].choosed = true;
  450. this.PstartPoint = row.index;
  451. },
  452. //更新所选组合项目
  453. // async onSubmit(msg) {
  454. // let ret = false
  455. // ret = await this.batchAddAsb()
  456. // if (!ret) {
  457. // if (msg) this.$message.warning({ showClose: true, message: `组合项目 ${msg} 失败!`})
  458. // return
  459. // }
  460. // ret = await this.batchDelAsb()
  461. // if (!ret) {
  462. // if (msg) this.$message.warning({ showClose: true, message: `组合项目 ${msg} 失败!`})
  463. // return
  464. // }
  465. // ret = await this.batchEditAsb()
  466. // if (!ret) {
  467. // if (msg) this.$message.warning({ showClose: true, message: `组合项目 ${msg} 失败!`})
  468. // return
  469. // }
  470. // console.log('this.prAsbOpraOpts.formId', this.prAsbOpraOpts.formId)
  471. // if (this.prAsbOpraOpts.formId) {
  472. // this.refreshFormId()
  473. // } else {
  474. // //触发保存人员基本信息
  475. // this.triggerHeadSave()
  476. // this.getPrAsb(this.prForm.id)
  477. // }
  478. // },
  479. //未选组合项目 勾选情况
  480. handleSelectionChange(val) {
  481. // this.selecteddata = val;
  482. this.asbItemChoosed = val;
  483. //console.log(this.asbItemChoosed);
  484. },
  485. // 添加组合项目
  486. ///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
  487. addAbs(asbItemChoosed, oprType) {
  488. let checked = true
  489. let payTypeFlag = '0' //默认个人支付
  490. //勾选时不需要此操作 start
  491. if (oprType && oprType == 'all') {
  492. asbItemChoosed = deepCopy(this.dataTransOpts.copyGroup.asbItem)
  493. } else if (oprType && oprType == 'choosed') {
  494. asbItemChoosed = []
  495. this.dataTransOpts.copyGroup.asbItem.forEach(e => {
  496. if (e.choosed) {
  497. asbItemChoosed.push(e)
  498. e.choosed = false
  499. }
  500. })
  501. }
  502. //勾选时不需要此操作 end
  503. if (asbItemChoosed.length < 1) {
  504. this.$message.warning({ showClose: true, message: "请选择要添加的组合项目" })
  505. return
  506. }
  507. //性别、年龄判断
  508. // "displayName": "身高体重",
  509. // "shortName": "哈f哈",
  510. // "forSexId": "F",
  511. // "itemTypeId": "3a0b16de-75b9-c910-c61b-844709a88940",
  512. // "price": 0,
  513. console.log('asbItemChoosed.length', asbItemChoosed.length)
  514. for (let i = 0; i < asbItemChoosed.length; i++) {
  515. if (this.prForm.sexId == 'U') break //未选性别时,无需判断组合项目性别限制
  516. if (asbItemChoosed[i].forSexId == 'A') continue
  517. if (asbItemChoosed[i].forSexId != this.prForm.sexId) {
  518. this.$message.warning({ showClose: true, message: `所选项目:${asbItemChoosed[i].displayName},不适合当前人员性别` })
  519. checked = false
  520. break
  521. }
  522. }
  523. //console.log(222,checked)
  524. if (!checked) return
  525. if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1'
  526. for (let i = 0; i < asbItemChoosed.length; i++) {
  527. let pojo = {
  528. asbitemId: asbItemChoosed[i].id,
  529. asbitemName: asbItemChoosed[i].displayName,
  530. patientRegisterId: this.prForm.id || this.dict.personOrgId,
  531. standardPrice: asbItemChoosed[i].price,
  532. chargePrice: asbItemChoosed[i].price,
  533. payTypeFlag,
  534. isCharge: "N",
  535. checkCompleteFlag: '0',
  536. discount: 100,
  537. amount: 1,
  538. total: asbItemChoosed[i].price,
  539. }
  540. // 优化加最上面
  541. //this.dataTransOpts.tableM.register_check_asbitem.push(pojo)
  542. this.dataTransOpts.tableM.register_check_asbitem.splice(0,0,pojo)
  543. }
  544. this.refreshAsbitem()
  545. },
  546. //人员已选组合项目 勾选情况
  547. selecteditems(val) {
  548. this.patientRegisterAbsChoosed = val
  549. },
  550. //批量提交添加组合项目
  551. async batchAddAsb() {
  552. let ret = false
  553. let patientRegisterId = this.prForm.id || this.prAsbOpraOpts.formId
  554. if (!patientRegisterId) {
  555. this.$message.warning({ showClose: true, message: "人员基本信息未保存" });
  556. return ret
  557. }
  558. let registerAsbitems = []
  559. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  560. if (!e.id) {
  561. registerAsbitems.push({
  562. asbitemId: e.asbitemId,
  563. patientRegisterId,
  564. standardPrice: e.standardPrice,
  565. chargePrice: e.chargePrice,
  566. payTypeFlag: e.payTypeFlag,
  567. isCharge: e.isCharge,
  568. amount: e.amount,
  569. groupPackageId: e.groupPackageId
  570. })
  571. }
  572. })
  573. if (registerAsbitems.length == 0) return true
  574. let body = {
  575. medicalCenterId: this.prForm.medicalCenterId,
  576. registerAsbitems,
  577. isAutoMerger: 'Y'
  578. }
  579. try {
  580. let res = await postapi('/api/app/registerasbitem/createregisterasbitemmany', body)
  581. if (res.code != -1) ret = true
  582. } catch (error) {
  583. console.log('批量添加组合项目失败', error)
  584. }
  585. return ret
  586. },
  587. //批量提交更新组合项目
  588. async batchEditAsb() {
  589. let ret = false
  590. let body = []
  591. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  592. if (e.id) {
  593. body.push({
  594. registerAsbitemId: e.id,
  595. input: {
  596. chargePrice: e.chargePrice,
  597. payTypeFlag: e.payTypeFlag,
  598. isCharge: e.isCharge,
  599. amount: e.amount,
  600. groupPackageId: e.groupPackageId
  601. }
  602. })
  603. }
  604. })
  605. if (body.length == 0) return true
  606. try {
  607. let res = await postapi(`/api/app/registerasbitem/updatemany`, body)
  608. if (res.code != -1) ret = true
  609. } catch (error) {
  610. console.log('批量提交更新组合项目失败', error)
  611. }
  612. return ret
  613. },
  614. //批量提交删除组合项目
  615. async batchDelAsb() {
  616. let ret = false
  617. // if(this.prAsbDels.length == 0) return true
  618. // let registerAsbitemIds=[]
  619. // this.prAsbDels.forEach(e => {
  620. // registerAsbitemIds.push(e.id)
  621. // })
  622. // console.log(`/api/app/registerasbitem/deletemany`, {registerAsbitemIds})
  623. // try {
  624. // let res = await postapi(`/api/app/registerasbitem/deletemany`, {registerAsbitemIds})
  625. // if(res.code != -1) ret = true
  626. // } catch (error) {
  627. // console.log('批量删除组合项目失败',error)
  628. // }
  629. return ret
  630. },
  631. //删除 人员已选中的组合项目
  632. ///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
  633. delAbs(absForDel, oprType) {
  634. let chargeComplete = ''
  635. let lfind = -1
  636. let tempRd = {}
  637. //勾选时不需要此操作 start
  638. if (oprType && oprType == 'all') {
  639. absForDel = deepCopy(this.dataTransOpts.tableM.register_check_asbitem)
  640. } else if (oprType && oprType == 'choosed') {
  641. absForDel = []
  642. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  643. if (e.choosed) {
  644. absForDel.push(e)
  645. e.choosed = false
  646. }
  647. })
  648. }
  649. //勾选时不需要此操作 end
  650. if (absForDel.length < 1) {
  651. this.$message.warning({ showClose: true, message: "请选择要移除的组合项目" })
  652. return
  653. }
  654. absForDel.forEach(e => {
  655. // 如果已经收费 或 体检,则不允许删除
  656. if (e.isCharge == 'Y' || (e.checkCompleteFlag && e.checkCompleteFlag != '0')) {
  657. chargeComplete += e.asbitemName + ','
  658. } else {
  659. lfind = arrayExistObj(this.dataTransOpts.tableM.register_check_asbitem, 'asbitemId', e.asbitemId)
  660. if (lfind > -1) {
  661. tempRd = Object.assign({}, this.dataTransOpts.tableM.register_check_asbitem.splice(lfind, 1)[0])
  662. // if(e.id) this.prAsbDels.push(tempRd)
  663. }
  664. }
  665. })
  666. //刷新
  667. this.refreshAsbitem()
  668. if (chargeComplete) {
  669. this.$message.info({ showClose: true, message: `所选项目:${chargeComplete}已收费或已检,不可删除!` });
  670. }
  671. },
  672. //双击删除已选项目
  673. removeAbs(row) {
  674. if (this.isComplete) {
  675. this.$message.info({ showClose: true, message: '人员已总检,不可 添加/删除 组合项目' })
  676. return
  677. }
  678. this.delAbs([row]);
  679. },
  680. //项目类别过滤 组合项目,未过滤已选择的组合项目
  681. changeItemType(data) {
  682. //console.log('changeItemType.data',data)
  683. this.itemTypeIds = data
  684. //console.log('getAsbItemByItemType', typeof this.itemTypeIds, this.itemTypeIds)
  685. let asbItemAll = deepCopy(this.dataTransOpts.copyGroup.asbItemAll)
  686. let lv = "";
  687. if (typeof this.itemTypeIds == "object") {
  688. if (this.itemTypeIds.length > 0) lv = this.itemTypeIds[this.itemTypeIds.length - 1];
  689. }
  690. if (lv) {
  691. this.dataTransOpts.copyGroup.asbItem = arrayFilter(asbItemAll, "itemTypeId", lv);
  692. } else {
  693. this.dataTransOpts.copyGroup.asbItem = deepCopy(asbItemAll);
  694. }
  695. arrayReduce(this.dataTransOpts.copyGroup.asbItem, this.dataTransOpts.tableM.register_check_asbitem, "id=asbitemId");
  696. },
  697. //选中 分组 所包含的组合项目
  698. getGroupAsbs(id) {
  699. if (!id) {
  700. this.groupAsbs = []
  701. this.changeGroup(id)
  702. return
  703. }
  704. getapi(`/api/app/customerorggroupdetail/getcustomerorggroupdetailinasbitem?CustomerOrgGroupId=${id}`)
  705. .then((res) => {
  706. if (res.code != -1) {
  707. this.groupAsbs = res.data
  708. this.changeGroup(id)
  709. }
  710. });
  711. },
  712. //选中 套餐 所包含的组合项目
  713. getPackageAsbs(id) {
  714. if (!id) {
  715. this.packageAsbs = []
  716. this.changePackage(id)
  717. return
  718. }
  719. postapi('/api/app/medicalpackagedetail/getmedicalpackageinasbitem', { medicalPackageId: id })
  720. .then((res) => {
  721. if (res.code != -1) {
  722. this.packageAsbs = res.data
  723. this.changePackage(id)
  724. }
  725. });
  726. },
  727. // 更换分组
  728. changeGroup(newId) {
  729. //已收费项目,不更改收费方式、价格及数量,只更改分组id
  730. let payTypeFlag = '0'
  731. let lfind = -1
  732. let tempRd = {}
  733. if (!newId) {
  734. this.setGroupPackageNull()
  735. return
  736. }
  737. if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1' //单位支付
  738. for (let i = this.dataTransOpts.tableM.register_check_asbitem.length - 1; i > -1; i--) {
  739. lfind = arrayExistObj(this.groupAsbs, 'asbitemId', this.dataTransOpts.tableM.register_check_asbitem[i].asbitemId)
  740. if (lfind > -1) {
  741. //找到了则更新此项目
  742. tempRd = Object.assign({}, this.groupAsbs.splice(lfind, 1)[0])
  743. this.dataTransOpts.tableM.register_check_asbitem[i].groupPackageId = newId
  744. this.dataTransOpts.tableM.register_check_asbitem[i].isBelongGroupPackage = 'Y'
  745. if (this.dataTransOpts.tableM.register_check_asbitem[i].isCharge != 'Y') {
  746. this.dataTransOpts.tableM.register_check_asbitem[i].payTypeFlag = payTypeFlag
  747. this.dataTransOpts.tableM.register_check_asbitem[i].amount = tempRd.customerOrgGroupDetailAmount
  748. this.dataTransOpts.tableM.register_check_asbitem[i].standardPrice = tempRd.price
  749. this.dataTransOpts.tableM.register_check_asbitem[i].chargePrice = tempRd.customerOrgGroupDetailPrice
  750. this.dataTransOpts.tableM.register_check_asbitem[i].discount = tempRd.discount
  751. }
  752. } else {
  753. //没找到则移除此项目
  754. if (this.dataTransOpts.tableM.register_check_asbitem[i].isCharge == 'Y' || (this.dataTransOpts.tableM.register_check_asbitem[i].checkCompleteFlag && this.dataTransOpts.tableM.register_check_asbitem[i].checkCompleteFlag != '0')) {
  755. this.dataTransOpts.tableM.register_check_asbitem[i].groupPackageId = null
  756. } else {
  757. tempRd = Object.assign({}, this.dataTransOpts.tableM.register_check_asbitem.splice(i, 1)[0])
  758. // if(tempRd.id) this.prAsbDels.push(tempRd)
  759. }
  760. }
  761. }
  762. // debugger
  763. //未找到则添加(如果在待删除中找到记录,则待删除中记录移至当前显示记录中来)
  764. this.groupAsbs.forEach(e => {
  765. // lfind = arrayExistObj(this.prAsbDels,'asbitemId',e.asbitemId)
  766. // if(lfind > -1){
  767. // tempRd = Object.assign(this.prAsbDels.splice(lfind,1)[0],
  768. // {
  769. // groupPackageId:newId,
  770. // standardPrice:e.price,
  771. // chargePrice:e.customerOrgGroupDetailPrice,
  772. // payTypeFlag,
  773. // isCharge: "N",
  774. // discount:e.discount,
  775. // amount:e.customerOrgGroupDetailAmount,
  776. // total: Math.round(e.customerOrgGroupDetailAmount * e.customerOrgGroupDetailPrice * 100)/100
  777. // }
  778. // )
  779. // }else{
  780. tempRd = {
  781. groupPackageId: newId,
  782. isBelongGroupPackage: 'Y',
  783. asbitemId: e.asbitemId,
  784. asbitemName: e.displayName,
  785. patientRegisterId: this.prForm.id,
  786. standardPrice: e.price,
  787. chargePrice: e.customerOrgGroupDetailPrice,
  788. payTypeFlag,
  789. isCharge: "N",
  790. discount: e.discount,
  791. amount: e.customerOrgGroupDetailAmount,
  792. total: Math.round(e.customerOrgGroupDetailAmount * e.customerOrgGroupDetailPrice * 100) / 100
  793. }
  794. // }
  795. this.dataTransOpts.tableM.register_check_asbitem.push(tempRd)
  796. })
  797. this.refreshAsbitem()
  798. },
  799. // 更换套餐
  800. changePackage(newId) {
  801. //已收费项目,不更改收费方式、价格及数量,只更改分组id
  802. let payTypeFlag = '0'
  803. let lfind = -1
  804. let tempRd = {}
  805. if (!newId) {
  806. this.setGroupPackageNull()
  807. return
  808. }
  809. if (this.prForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1' //单位支付
  810. for (let i = this.dataTransOpts.tableM.register_check_asbitem.length - 1; i > -1; i--) {
  811. lfind = arrayExistObj(this.packageAsbs, 'id', this.dataTransOpts.tableM.register_check_asbitem[i].asbitemId)
  812. if (lfind > -1) {
  813. //找到了则更新此项目
  814. tempRd = Object.assign({}, this.packageAsbs.splice(lfind, 1)[0])
  815. this.dataTransOpts.tableM.register_check_asbitem[i].groupPackageId = newId
  816. this.dataTransOpts.tableM.register_check_asbitem[i].isBelongGroupPackage = 'Y'
  817. if (this.dataTransOpts.tableM.register_check_asbitem[i].isCharge != 'Y') {
  818. this.dataTransOpts.tableM.register_check_asbitem[i].payTypeFlag = payTypeFlag
  819. this.dataTransOpts.tableM.register_check_asbitem[i].amount = tempRd.medicalPackageDetailAmount
  820. this.dataTransOpts.tableM.register_check_asbitem[i].standardPrice = tempRd.price
  821. this.dataTransOpts.tableM.register_check_asbitem[i].chargePrice = tempRd.medicalPackageDetailPrice
  822. this.dataTransOpts.tableM.register_check_asbitem[i].discount = tempRd.discount
  823. }
  824. } else {
  825. //没找到则移除此项目
  826. if (this.dataTransOpts.tableM.register_check_asbitem[i].isCharge == 'Y' || (this.dataTransOpts.tableM.register_check_asbitem[i].checkCompleteFlag && this.dataTransOpts.tableM.register_check_asbitem[i].checkCompleteFlag != '0')) {
  827. this.dataTransOpts.tableM.register_check_asbitem[i].groupPackageId = null
  828. } else {
  829. tempRd = Object.assign({}, this.dataTransOpts.tableM.register_check_asbitem.splice(i, 1)[0])
  830. // if(tempRd.id) this.prAsbDels.push(tempRd)
  831. }
  832. }
  833. }
  834. //未找到则添加(如果在待删除中找到记录,则待删除中记录移至当前显示记录中来)
  835. this.packageAsbs.forEach(e => {
  836. // lfind = arrayExistObj(this.prAsbDels,'asbitemId',e.id)
  837. // if(lfind > -1){
  838. // tempRd = Object.assign(this.prAsbDels.splice(lfind,1)[0],
  839. // {
  840. // groupPackageId:newId,
  841. // standardPrice:e.price,
  842. // chargePrice:e.medicalPackageDetailPrice,
  843. // payTypeFlag,
  844. // isCharge: "N",
  845. // discount:e.discount,
  846. // amount:e.medicalPackageDetailAmount,
  847. // total: Math.round(e.medicalPackageDetailAmount * e.medicalPackageDetailPrice * 100)/100
  848. // }
  849. // )
  850. // }else{
  851. tempRd = {
  852. groupPackageId: newId,
  853. isBelongGroupPackage: 'Y',
  854. asbitemId: e.id,
  855. asbitemName: e.displayName,
  856. patientRegisterId: this.prForm.id,
  857. standardPrice: e.price,
  858. chargePrice: e.medicalPackageDetailPrice,
  859. payTypeFlag,
  860. isCharge: "N",
  861. discount: e.discount,
  862. amount: e.medicalPackageDetailAmount,
  863. total: Math.round(e.medicalPackageDetailAmount * e.medicalPackageDetailPrice * 100) / 100
  864. }
  865. // }
  866. this.dataTransOpts.tableM.register_check_asbitem.push(tempRd)
  867. })
  868. this.refreshAsbitem()
  869. },
  870. // 从 有分组/套餐 切换成 无分组/套餐 时
  871. setGroupPackageNull() {
  872. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  873. e.groupPackageId = null
  874. e.isBelongGroupPackage = 'N'
  875. })
  876. },
  877. //双击选择组合项目
  878. dbClickChoosedAsb(row) {
  879. if (this.isComplete) {
  880. this.$message.info({ showClose: true, message: '人员已总检,不可 添加/删除 组合项目' })
  881. return
  882. }
  883. this.addAbs([row]);
  884. },
  885. //快速选择组合项目
  886. quickChoosedAsb(v) {
  887. //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
  888. let lfind = -1
  889. if (v) {
  890. lfind = arrayExistObj(this.asbItemQuick, 'id', v)
  891. if (lfind > -1) {
  892. this.addAbs([this.asbItemQuick[lfind]])
  893. }
  894. }
  895. //this.$refs['quickAsbOCX'].focus(); //asbItemId
  896. this.$nextTick(() => {
  897. this.$refs['quickAsbOCX'].blur(); //total asbItemId
  898. this.asbItemId = ''
  899. this.quickAsb = deepCopy(this.asbItemQuick)
  900. this.$refs['quickAsbOCX'].focus(); //total asbItemId
  901. });
  902. },
  903. //快速选择组合项目时,调整可按拼间简码及简称查找
  904. filterMethod(keyWords) {
  905. //console.log('filterMethod',this.asbItemQuick)
  906. if (keyWords) {
  907. this.quickAsb = [];
  908. this.asbItemQuick.forEach(item => {
  909. if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  910. || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  911. || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1) {
  912. this.quickAsb.push(item);
  913. }
  914. });
  915. } else {
  916. this.quickAsb = deepCopy(this.asbItemQuick);
  917. }
  918. },
  919. //修改总折扣
  920. changeAllDiscount() {
  921. if (!this.discount || this.discount == 0) return
  922. if (!this.dataTransOpts.tableM.register_check_asbitem || this.dataTransOpts.tableM.register_check_asbitem.length == 0) return
  923. let total = Number(0)
  924. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  925. if (e.isCharge == 'N') {
  926. e.discount = this.discount
  927. e.chargePrice = Math.round(e.standardPrice * this.discount) / 100
  928. e.total = Math.round(e.standardPrice * this.discount * e.amount) / 100
  929. }
  930. total = total + Number(e.total)
  931. });
  932. this.total = Math.round(total * 100) / 100
  933. this.$nextTick(() => {
  934. this.$refs['patientRegister_patientRegisterAbs'].doLayout()
  935. })
  936. // this.onSubmit('')
  937. },
  938. //修改总金额
  939. changeTotal() {
  940. if (!this.total) return
  941. if (!this.dataTransOpts.tableM.register_check_asbitem || this.dataTransOpts.tableM.register_check_asbitem.length == 0) return
  942. let sumChargeDetails = Number(0) //单个标准价折后价 合计总计
  943. let qtyIsOneLast = 0 //数量为1的最后行项目,用于返写金额
  944. // console.log('this.total / this.totalStand',this.total , this.totalStand)
  945. // 过滤已收费的项目
  946. let unChargeTotalStand = Number(this.totalStand) //未收费的总标准价
  947. let chargeTotal = Number(0) //
  948. this.dataTransOpts.tableM.register_check_asbitem.forEach(e => {
  949. if (e.isCharge == 'Y') {
  950. chargeTotal = chargeTotal + Math.round(e.chargePrice * e.amount * 100) / 100
  951. unChargeTotalStand = unChargeTotalStand - Math.round(e.standardPrice * e.amount * 100) / 100
  952. }
  953. });
  954. let total = this.total - chargeTotal
  955. this.discount = Math.round((100 * total / unChargeTotalStand) * 100) / 100
  956. this.dataTransOpts.tableM.register_check_asbitem.forEach((e, index) => {
  957. if (e.isCharge == 'N') {
  958. if (e.amount == 1 && e.standardPrice != 0) qtyIsOneLast = index
  959. e.discount = this.discount
  960. e.chargePrice = Math.round((e.standardPrice * this.discount / 100) * 100) / 100
  961. e.total = Math.round((e.standardPrice * this.discount * e.amount / 100) * 100) / 100
  962. sumChargeDetails += Math.round((e.standardPrice * this.discount * e.amount / 100) * 100) / 100
  963. }
  964. });
  965. console.log('this.dataTransOpts.tableM.register_check_asbitem', this.dataTransOpts.tableM.register_check_asbitem)
  966. // console.log('this.total - sumChargeDetails', sumChargeDetails, this.total - sumChargeDetails)
  967. //平衡金额(按总价折扣后,再根据折扣合计 会出现金额差)
  968. if (total != sumChargeDetails) {
  969. console.log('qtyIsOneLast', qtyIsOneLast)
  970. this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].total =
  971. Math.round((Number(this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].total) + Number(total) - Number(sumChargeDetails)) * 100) / 100
  972. this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].chargePrice =
  973. Math.round(this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].total * 100 / this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].amount) / 100
  974. if (this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].standardPrice != 0) {
  975. this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].discount =
  976. Math.round(this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].chargePrice * 10000 / this.dataTransOpts.tableM.register_check_asbitem[qtyIsOneLast].standardPrice) / 100
  977. }
  978. }
  979. //this.onSubmit('')
  980. },
  981. //修改数量
  982. changeDiscount(index) {
  983. //console.log('index',index)
  984. if (!this.dataTransOpts.tableM.register_check_asbitem || this.dataTransOpts.tableM.register_check_asbitem.length == 0) return
  985. if (!this.dataTransOpts.tableM.register_check_asbitem[index].discount) return
  986. //console.log( this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice, this.dataTransOpts.tableM.register_check_asbitem[index].standardPrice)
  987. this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice = Math.round(this.dataTransOpts.tableM.register_check_asbitem[index].standardPrice * this.dataTransOpts.tableM.register_check_asbitem[index].discount) / 100
  988. this.dataTransOpts.tableM.register_check_asbitem[index].total = this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice * this.dataTransOpts.tableM.register_check_asbitem[index].amount
  989. // this.onSubmit('')
  990. },
  991. //修改单价
  992. changePrice(index) {
  993. //console.log('index',index)
  994. if (!this.dataTransOpts.tableM.register_check_asbitem || this.dataTransOpts.tableM.register_check_asbitem.length == 0) return
  995. if (!this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice) return
  996. //console.log( this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice, this.dataTransOpts.tableM.register_check_asbitem[index].standardPrice)
  997. this.dataTransOpts.tableM.register_check_asbitem[index].discount = Math.round(this.dataTransOpts.tableM.register_check_asbitem[index].chargePrice * 10000 / this.dataTransOpts.tableM.register_check_asbitem[index].standardPrice) / 100
  998. // this.onSubmit('')
  999. },
  1000. //自定义计算列
  1001. getSummaries(param) {
  1002. const { columns, data } = param;
  1003. const sumCol = [1, 5] //需合计的列
  1004. const sums = [];
  1005. let count = this.dataTransOpts.tableM.register_check_asbitem.length
  1006. let pack = this.dataTransOpts.tableM.register_check_asbitem.filter(e => { return e.isBelongGroupPackage == 'Y' }).length
  1007. this.asbDesc = `共选 ${count} 个项目,其中套餐/分组 ${pack} 个,加做 ${count - pack}`
  1008. columns.forEach((column, index) => {
  1009. //console.log('column, index,data',column, index,data)
  1010. //显示合计列
  1011. if (index === 0) {
  1012. sums[index] = `合计`;
  1013. return;
  1014. }
  1015. //不合计的列
  1016. if (sumCol.indexOf(index) == -1) {
  1017. sums[index] = '';
  1018. return;
  1019. }
  1020. sums[index] = 0
  1021. data.forEach(e => {
  1022. if (!isNaN(e[column.property])) {
  1023. if (index == 1) {
  1024. sums[index] += e[column.property] * e['amount']
  1025. } else {
  1026. sums[index] += e[column.property]
  1027. }
  1028. }
  1029. })
  1030. sums[index] = Math.round(sums[index] * 100) / 100 //+ ' 元';
  1031. // const values = data.map(item => Number(item[column.property]));
  1032. // if (!values.every(value => isNaN(value))) {
  1033. // sums[index] = values.reduce((prev, curr) => {
  1034. // const value = Number(curr);
  1035. // if (!isNaN(value)) {
  1036. // //return prev + curr; //原始
  1037. // return prev + curr; //改造
  1038. // } else {
  1039. // return prev;
  1040. // }
  1041. // }, 0);
  1042. // sums[index] = sums[index].toFixed(2) + ' 元';
  1043. // } else {
  1044. // sums[index] = 'N/A';
  1045. // }
  1046. });
  1047. this.totalStand = sums[1];
  1048. //console.log('this.totalFoucs/this.discountFoucs',this.totalFoucs,this.discountFoucs)
  1049. if (!this.totalFoucs) this.total = sums[5];
  1050. if (!this.discountFoucs) this.discount = Math.round(this.total * 10000 / this.totalStand) / 100;
  1051. return sums;
  1052. },
  1053. // 弹出组合项目明细
  1054. getAsbItems(row) {
  1055. let asbItems = this.dataTransOpts.copyGroup.asbItems.filter(e => { return e.asbitemId == row.asbitemId })
  1056. let content = ""
  1057. let length = asbItems.length
  1058. let modeBase = 1, count = 0, pWidth = 390
  1059. if (length >= 30) {
  1060. modeBase = 3
  1061. pWidth = 130
  1062. } else if (length >= 20) {
  1063. modeBase = 2
  1064. pWidth = 195
  1065. }
  1066. // 数据项太多时,分列显示
  1067. asbItems.forEach((e, i) => {
  1068. if (modeBase == 1) {
  1069. content += '<p>' + e.itemName + '</p>'
  1070. } else {
  1071. if (i == 0) {
  1072. count = 1
  1073. content += `<div style="display: flex;"><p style="width: ${pWidth}px;">` + e.itemName + '</p>'
  1074. } else if ((i + 1) % modeBase == 0) {
  1075. content += `<p style="width: ${pWidth}px;">` + e.itemName + '</p></div><div style="display: flex;">'
  1076. count = 1
  1077. } else {
  1078. content += `<p style="width: ${pWidth}px;">` + e.itemName + '</p>'
  1079. count++
  1080. }
  1081. }
  1082. });
  1083. if (modeBase > 1) {
  1084. for (let index = 0; index < 3; index++) {
  1085. if (modeBase == count) break
  1086. content += '<p></p>'
  1087. count++
  1088. }
  1089. content += '</div>'
  1090. }
  1091. // console.log('content',content)
  1092. this.$alert(content, `${row.asbitemName} (共 ${asbItems.length} 项)`, {
  1093. dangerouslyUseHTMLString: true,
  1094. showClose: false
  1095. });
  1096. },
  1097. },
  1098. //监听事件
  1099. watch: {
  1100. // //配合复制新增使用 查询人员下的组合项目
  1101. // "prForm.id":{
  1102. // immediate: true, // 立即执行
  1103. // // deep: true, // 深度监听复杂类型内变化
  1104. // handler(newVal,oldVal){
  1105. // console.log('人员登记 组合项目明细,人员id:',newVal,oldVal)
  1106. // this.oldFormId = oldVal
  1107. // this.getPrAsb(newVal)
  1108. // // if(newVal != oldVal){
  1109. // // this.getPrAsb(newVal)
  1110. // // }
  1111. // }
  1112. // },
  1113. // //人员 id 未变的情况下,亦可触发刷新组合项目
  1114. // "prAsbOpraOpts.prAsbQuery":{
  1115. // // immediate: true, // 立即执行
  1116. // // deep: true, // 深度监听复杂类型内变化
  1117. // handler(newVal,oldVal){
  1118. // console.log('watch:prAsbOpraOpts.prAsbQuery:',newVal,oldVal)
  1119. // if(newVal != oldVal){
  1120. // this.getPrAsb(this.prForm.id)
  1121. // }
  1122. // }
  1123. // },
  1124. // 查询人员登记项目
  1125. "dataTransOpts.refresh.register_check_asbitem.D": {
  1126. // immediate: true, // 立即执行
  1127. // deep: true, // 深度监听复杂类型内变化
  1128. handler(newVal, oldVal) {
  1129. console.log('watch: 刷新 人员登记/编辑 时的组合项目: ', this.dataTransOpts.tableS.patient_register.id)
  1130. if (newVal != oldVal) this.getPrAsb(this.dataTransOpts.tableS.patient_register.id)
  1131. }
  1132. },
  1133. "dataTransOpts.refresh.register_check_asbitem.OnlyRefreshAsbitem": {
  1134. // immediate: true, // 立即执行
  1135. // deep: true, // 深度监听复杂类型内变化
  1136. handler(newVal, oldVal) {
  1137. if (newVal != oldVal) this.refreshAsbitem()
  1138. }
  1139. },
  1140. //更换分组
  1141. "prAsbOpraOpts.prAsbGroup": {
  1142. // immediate: true, // 立即执行
  1143. // deep: true, // 深度监听复杂类型内变化
  1144. handler(newVal, oldVal) {
  1145. if (newVal != oldVal) {
  1146. this.getGroupAsbs(this.prForm.customerOrgGroupId)
  1147. }
  1148. }
  1149. },
  1150. //更换套餐
  1151. "prAsbOpraOpts.prAsbPackage": {
  1152. // immediate: true, // 立即执行
  1153. // deep: true, // 深度监听复杂类型内变化
  1154. handler(newVal, oldVal) {
  1155. if (newVal != oldVal) {
  1156. this.getPackageAsbs(this.prForm.medicalPackageId)
  1157. }
  1158. }
  1159. },
  1160. //复制新增 拷贝明细项目
  1161. "prAsbOpraOpts.copyNew": {
  1162. // immediate: true, // 立即执行
  1163. // deep: true, // 深度监听复杂类型内变化
  1164. handler(newVal, oldVal) {
  1165. if (newVal != oldVal) {
  1166. this.copyNew()
  1167. }
  1168. }
  1169. },
  1170. //体检信息保存,触发已选组合项目保存
  1171. // "prAsbOpraOpts.prAsbSave"(newVal, oldVal) {
  1172. // console.log("patientRegister.saveTimes newVal:", newVal, " oldVal:", oldVal);
  1173. // if (newVal != oldVal) {
  1174. // this.onSubmit('');
  1175. // }
  1176. // },
  1177. },
  1178. };
  1179. </script>
  1180. <style lang="scss" scoped>
  1181. @import "../../assets/css/global_table.css";
  1182. @import "../../assets/css/global_input.css";
  1183. @import "../../assets/css/global.css";
  1184. .mainareaBox {
  1185. border: 1px solid #888;
  1186. height: v-bind("tableHeight + 'px'");
  1187. margin-top: 5px;
  1188. border-radius: 5px;
  1189. }
  1190. .btnList {
  1191. margin-top: 5px;
  1192. margin-left: 5px;
  1193. margin-right: 5px;
  1194. }
  1195. .disTotal {
  1196. margin-left: 10px;
  1197. }
  1198. </style>