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.

293 lines
8.7 KiB

2 years ago
  1. <template>
  2. <div style="display: flex; margin-top: -30px;">
  3. <div style="width:230px;">
  4. <div style="display: flex;">
  5. <span>项目类别</span>
  6. <el-cascader :options="dict.itemTypeTree" v-model="itemTypeIds" style="margin-left: 3px;width:160px;"
  7. :props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" :show-all-levels="false"
  8. clearable filterable @change="parseAsbitem" size="small">
  9. </el-cascader>
  10. </div>
  11. <div class="mainareaBox">
  12. <el-table :data="asbItems" :height="400" @row-dblclick="dbClickChoosedAsb"
  13. @selection-change="handleSelectionChange" size="small">
  14. <el-table-column type="selection" align="center" width="60" />
  15. <el-table-column prop="displayName" label="未选组合项目" width="160" />
  16. </el-table>
  17. </div>
  18. </div>
  19. <div style="width:100px;margin-top: 70px;">
  20. <div class="btnList">
  21. <el-button type="primary" @click="addAbs(asbItemChoosed)" style="width:90px;">添加 <i class="el-icon-right"></i>
  22. </el-button>
  23. </div>
  24. <div class="btnList">
  25. <el-button type="primary" @click="delAbs(asbItemOCXChoosed)" style="width:90px;">移除 <i class="el-icon-back"></i>
  26. </el-button>
  27. </div>
  28. </div>
  29. <div style="display: block; width:230px;">
  30. <div class="disTotal">
  31. <el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small" filterable clearable remote automatic-dropdown
  32. :remote-method="remoteMethod" @change="quickChoosedAsb" default-first-option ref="asbItemId"
  33. style="width:150px;text-align: left;padding-right: 15px;">
  34. <el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />
  35. </el-select>
  36. </div>
  37. <div class="mainareaBox">
  38. <el-table :data="report.dataAsbitemOCX" height="400" width="100%" @row-dblclick="removeAbs"
  39. @selection-change="selecteditems" size="small">
  40. <!-- temporaryselection personnelUnit.nogroupselected-->
  41. <el-table-column type="selection" align="center" width="60" />
  42. <el-table-column label="已选组合项目" width="160" prop="displayName" />
  43. </el-table>
  44. </div>
  45. </div>
  46. <div style="width:100px;margin-top: 70px;">
  47. <div class="btnList">
  48. <el-button type="primary" @click="addAbs(asbItemChoosed)" style="width:90px;">复制套餐</el-button>
  49. </div>
  50. <div class="btnList">
  51. <el-button type="primary" @click="btnOk('close')" style="width:90px;">确定 <i class="el-icon-check"></i>
  52. </el-button>
  53. </div>
  54. <div class="btnList"
  55. style="text-align: center;background-color: rgb(192, 192, 192);border-radius: 5%;padding: 5px 0;">
  56. 已选组合项<br>
  57. 目为空时即<br>
  58. 表示选择所<br>
  59. 有组合项自
  60. </div>
  61. </div>
  62. </div>
  63. </template>
  64. <script>
  65. import { mapState, mapActions } from "vuex";
  66. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  67. import { arrayFilter, arrayReduce, arrayExistObj, deepCopy } from "../../utlis/proFunc";
  68. export default {
  69. props: ["patientRegisterForm", "payTypeFlag"],
  70. data() {
  71. return {
  72. itemTypeIds: [], //项目类别
  73. asbItems: [], //可被选的 asbItem
  74. asbItemChoosed: [], //勾选的 未选组合项目
  75. asbItemOCXChoosed: [], //勾选的 已选组合项目
  76. asbItemQuick: [], //可供 快速选择的组合项目
  77. quickAsb: [], //快速选择当前显的下拉数据
  78. asbItemId: '', //快速选择的组合项目ID
  79. };
  80. },
  81. computed: {
  82. ...mapState(["dict", "customerOrg", "patientRegister", "personnelUnit", "report"]),
  83. },
  84. created() {
  85. },
  86. mounted() {
  87. this.dictInit();
  88. },
  89. methods: {
  90. dictInit() {
  91. getapi("/api/app/asbitem/in-filter?Filter").then((res) => {
  92. if (res.code == 1) {
  93. this.dict.asbItemAll = res.data.items;
  94. this.parseAsbitem();
  95. }
  96. });
  97. },
  98. //分析可选组合项目,及快速可选组合项目的数据
  99. parseAsbitem() {
  100. this.asbItemQuick = deepCopy(this.dict.asbItemAll);
  101. arrayReduce(this.asbItemQuick, this.report.dataAsbitemOCX, 'id');
  102. this.asbItems = deepCopy(this.asbItemQuick);
  103. if (this.itemTypeIds && this.itemTypeIds.length > 0) {
  104. this.asbItems = arrayFilter(this.asbItems, 'itemTypeId', this.itemTypeIds[this.itemTypeIds.length - 1])
  105. }
  106. },
  107. //未选组合项目 勾选情况
  108. handleSelectionChange(val) {
  109. // this.selecteddata = val;
  110. this.asbItemChoosed = val;
  111. //console.log(this.asbItemChoosed);
  112. },
  113. // 添加组合项目
  114. ///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
  115. addAbs(asbItemChoosed) {
  116. if (asbItemChoosed.length < 1) {
  117. alert("请选择要添加的组合项目")
  118. return
  119. }
  120. arrayReduce(this.asbItems, asbItemChoosed, 'id')
  121. arrayReduce(this.asbItemQuick, asbItemChoosed, 'id')
  122. this.report.dataAsbitemOCX = this.report.dataAsbitemOCX.concat(asbItemChoosed)
  123. this.btnOk();
  124. },
  125. //人员已选组合项目 勾选情况
  126. selecteditems(val) {
  127. this.asbItemOCXChoosed = val
  128. },
  129. //删除 人员已选中的组合项目
  130. ///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
  131. delAbs(absForDel) {
  132. if (absForDel.length < 1) {
  133. alert("请选择要移除的组合项目")
  134. return
  135. }
  136. arrayReduce(this.report.dataAsbitemOCX, absForDel, 'id');
  137. this.asbItems = this.asbItems.concat(absForDel)
  138. this.asbItemQuick = this.asbItemQuick.concat(absForDel)
  139. this.btnOk();
  140. },
  141. //双击删除已选项目
  142. removeAbs(row) {
  143. this.delAbs([row]);
  144. },
  145. //双击选择组合项目
  146. dbClickChoosedAsb(row) {
  147. this.addAbs([row]);
  148. },
  149. //快速选择组合项目
  150. quickChoosedAsb(v) {
  151. //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
  152. let lfind = -1
  153. if (v) {
  154. lfind = arrayExistObj(this.asbItemQuick, 'id', v)
  155. if (lfind > -1) {
  156. this.addAbs([this.asbItemQuick[lfind]])
  157. }
  158. }
  159. },
  160. //快速选择组合项目时,调整可按拼间简码及简称查找
  161. remoteMethod(keyWords) {
  162. //console.log('remoteMethod',this.dict.asbItemQuick)
  163. if (keyWords) {
  164. this.quickAsb = [];
  165. this.asbItemQuick.forEach(item => {
  166. if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  167. || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  168. || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1) {
  169. this.quickAsb.push(item);
  170. }
  171. });
  172. } else {
  173. this.quickAsb = deepCopy(this.asbItemQuick);
  174. }
  175. },
  176. btnOk(closed){
  177. if(this.report.dataAsbitemOCX && this.report.dataAsbitemOCX.length > 0){
  178. switch (this.report.dataAsbitemOCX.length) {
  179. case 1:
  180. this.patientRegister.query.asbitemOCX = this.report.dataAsbitemOCX[0].displayName
  181. break;
  182. default:
  183. this.patientRegister.query.asbitemOCX = this.report.dataAsbitemOCX[0].displayName + ',… + ' + this.report.dataAsbitemOCX.length
  184. break;
  185. }
  186. }else{
  187. this.patientRegister.query.asbitemOCX = ''
  188. }
  189. if(closed){
  190. this.report.dialogAsbitemOCX = false
  191. }
  192. }
  193. },
  194. //监听事件
  195. watch: {
  196. },
  197. };
  198. </script>
  199. <style lang="scss" scoped>
  200. @import "../../assets/css/global.css";
  201. .mainareaBox {
  202. border: 1px solid #000;
  203. height: 400px;
  204. margin-top: 5px;
  205. }
  206. .btnList {
  207. margin-top: 5px;
  208. margin-left: 5px;
  209. margin-right: 5px;
  210. }
  211. .disTotal {
  212. margin-left: 10px;
  213. }
  214. ::v-deep .el-input__inner {
  215. /*text-align: center;*/
  216. padding-left: 2px;
  217. padding-right: 15px;
  218. }
  219. ::v-deep .el-input__icon {
  220. width: 15px;
  221. /* 输入框下拉箭头或清除图标 默认 25 */
  222. }
  223. /* 表格 表头 列间距控制 */
  224. ::v-deep .el-table th.el-table__cell>.cell {
  225. text-align: center;
  226. /* 表格 表头 对齐方式,默认 left */
  227. padding-right: 2px;
  228. /* 表格 表头 列间距控制,默认 10px */
  229. padding-left: 2px;
  230. /* 表格 表头 列间距控制,默认 10px */
  231. }
  232. /* 表格 表体 首列左间距控制 */
  233. ::v-deep .el-table--border .el-table__cell:first-child .cell {
  234. padding-left: 2px;
  235. /* 表格 表体 首列左间距控制,默认 10px */
  236. }
  237. /* 表格 行列间距控制 ,默认 10 px*/
  238. ::v-deep .el-table__cell {
  239. padding: 2px 2px 2px 2px;
  240. /* 上,右,下,左 */
  241. }
  242. ::v-deep .cell {
  243. padding-left: 2px;
  244. padding-right: 2px;
  245. }
  246. ::v-deep .el-icon-date:before {
  247. content: ""
  248. }</style>