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.

359 lines
11 KiB

3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
4 weeks ago
2 years ago
3 years ago
2 years ago
3 years ago
4 weeks ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
3 years ago
4 weeks ago
2 years ago
3 years ago
2 years ago
4 weeks ago
3 years ago
2 years ago
3 years ago
4 weeks ago
2 years ago
3 years ago
4 weeks ago
2 years ago
3 years ago
4 weeks ago
3 years ago
3 years ago
3 years ago
2 years ago
4 weeks ago
2 years ago
4 weeks ago
3 years ago
  1. <template>
  2. <div style="display: flex; ">
  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" ref="example" popper-class="example">
  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:110px;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="diagnosis.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="diagnosisTemplateVisble = true" 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. <!--诊断模板-->
  63. <el-dialog title="诊断模板" :visible.sync="diagnosisTemplateVisble" width="600px" height="400" :show-close="false"
  64. :close-on-click-modal="false" :append-to-body="true">
  65. <el-table :data="dict.diagnosisTemplates" border height="350" row-key="id" size="small" highlight-current-row
  66. @row-click="rowClick" @row-dblclick="rowDblclick" ref="patientList" style="margin-top: -10px;">
  67. <el-table-column type="index" width="50" label="序号" align="center" />
  68. <!--
  69. <el-table-column prop="id" label="编号" width="300">
  70. </el-table-column>
  71. -->
  72. <el-table-column prop="displayName" width="150" label="诊断模板名称" align="center">
  73. </el-table-column>
  74. <el-table-column prop="creatorName" width="70" label="创建者" align="center">
  75. </el-table-column>
  76. <el-table-column prop="creationTime" label="创建时间" width="160" align="center">
  77. <template slot-scope="scope">
  78. {{ moment(scope.row.creationTime).format("yyyy-MM-DD HH:mm:ss") }}
  79. </template>
  80. </el-table-column>
  81. <el-table-column prop="lastModifierName" width="70" label="修改者" align="center">
  82. </el-table-column>
  83. <el-table-column prop="lastModificationTime" label="修改时间" width="160" align="center">
  84. <template slot-scope="scope">
  85. {{ moment(scope.row.lastModificationTime).format("yyyy-MM-DD HH:mm:ss") }}
  86. </template>
  87. </el-table-column>
  88. </el-table>
  89. <span slot="footer" class="dialog-footer">
  90. <el-button @click="diagnosisTemplateVisble = false" style="width:90px;">取消</el-button>
  91. <el-button type="primary" @click="copyDiagnosisTemplate" style="width:90px;">确定</el-button>
  92. </span>
  93. </el-dialog>
  94. </div>
  95. </template>
  96. <script>
  97. import { mapState, mapActions } from "vuex";
  98. import moment from "moment";
  99. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  100. import { dddw, arrayFilter, arrayReduce, arrayExistObj, deepCopy } from "../../utlis/proFunc";
  101. export default {
  102. components: {
  103. },
  104. props: ["patientRegisterForm", "payTypeFlag"],
  105. data() {
  106. return {
  107. itemTypeIds: [], //项目类别
  108. asbItems: [], //可被选的 asbItem
  109. asbItemChoosed: [], //勾选的 未选组合项目
  110. asbItemOCXChoosed: [], //勾选的 已选组合项目
  111. asbItemQuick: [], //可供 快速选择的组合项目
  112. quickAsb: [], //快速选择当前显的下拉数据
  113. asbItemId: '', //快速选择的组合项目ID
  114. diagnosisTemplateVisble: false,
  115. diagnosisTemplateId: '', //当前选中套餐ID
  116. packageAsbitems: [], //套餐中包含的组合项目
  117. };
  118. },
  119. computed: {
  120. ...mapState(["dict", "customerOrg", "patientRegister", "personnelUnit", "diagnosis"]),
  121. },
  122. created() {
  123. },
  124. mounted() {
  125. this.dictInit();
  126. // this.diagnosis.dataAsbitemOCX=[]
  127. // this.patientRegister.query.StatisticsOCX = ''
  128. },
  129. methods: {
  130. moment, dddw,
  131. dictInit() {
  132. getapi('/api/app/diagnosis-template/in-filter')
  133. .then(res => {
  134. if (res.code > -1) this.dict.diagnosisTemplates = res.data
  135. })
  136. //分析可选组合项目,及快速可选组合项目的数据
  137. this.parseAsbitem();
  138. },
  139. //分析可选组合项目,及快速可选组合项目的数据
  140. parseAsbitem(v) {
  141. this.asbItemQuick = deepCopy(this.dict.asbItemAll);
  142. arrayReduce(this.asbItemQuick, this.diagnosis.dataAsbitemOCX, 'id');
  143. this.asbItems = deepCopy(this.asbItemQuick);
  144. if (this.itemTypeIds && this.itemTypeIds.length > 0) {
  145. this.asbItems = arrayFilter(this.asbItems, 'itemTypeId', this.itemTypeIds[this.itemTypeIds.length - 1])
  146. }
  147. if (v) {
  148. this.$refs.example.toggleDropDownVisible();
  149. }
  150. },
  151. //未选组合项目 勾选情况
  152. handleSelectionChange(val) {
  153. // this.selecteddata = val;
  154. this.asbItemChoosed = val;
  155. //console.log(this.asbItemChoosed);
  156. },
  157. // 添加组合项目
  158. ///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
  159. addAbs(asbItemChoosed) {
  160. if (asbItemChoosed.length < 1) {
  161. alert("请选择要添加的诊断")
  162. return
  163. }
  164. arrayReduce(this.asbItems, asbItemChoosed, 'id')
  165. arrayReduce(this.asbItemQuick, asbItemChoosed, 'id')
  166. // 选模板时,防止重复添加
  167. let tempArr = []
  168. asbItemChoosed.forEach(e => {
  169. if(arrayExistObj(this.diagnosis.dataAsbitemOCX,'id',e.id) < 0) tempArr.push(e)
  170. });
  171. this.diagnosis.dataAsbitemOCX = this.diagnosis.dataAsbitemOCX.concat(tempArr)
  172. this.btnOk();
  173. },
  174. //人员已选组合项目 勾选情况
  175. selecteditems(val) {
  176. this.asbItemOCXChoosed = val
  177. },
  178. //删除 人员已选中的组合项目
  179. ///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
  180. delAbs(absForDel) {
  181. if (absForDel.length < 1) {
  182. alert("请选择要移除的诊断")
  183. return
  184. }
  185. arrayReduce(this.diagnosis.dataAsbitemOCX, absForDel, 'id');
  186. this.asbItems = this.asbItems.concat(absForDel)
  187. this.asbItemQuick = this.asbItemQuick.concat(absForDel)
  188. this.btnOk();
  189. },
  190. //双击删除已选项目
  191. removeAbs(row) {
  192. this.delAbs([row]);
  193. },
  194. //双击选择组合项目
  195. dbClickChoosedAsb(row) {
  196. this.addAbs([row]);
  197. },
  198. //快速选择组合项目
  199. quickChoosedAsb(v) {
  200. //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
  201. let lfind = -1
  202. if (v) {
  203. lfind = arrayExistObj(this.asbItemQuick, 'id', v)
  204. if (lfind > -1) {
  205. this.addAbs([this.asbItemQuick[lfind]])
  206. }
  207. }
  208. },
  209. //快速选择组合项目时,调整可按拼间简码及简称查找
  210. remoteMethod(keyWords) {
  211. //console.log('remoteMethod',this.dict.asbItemQuick)
  212. if (keyWords) {
  213. this.quickAsb = [];
  214. this.asbItemQuick.forEach(item => {
  215. if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  216. || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  217. // || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  218. ) {
  219. this.quickAsb.push(item);
  220. }
  221. });
  222. } else {
  223. this.quickAsb = deepCopy(this.asbItemQuick);
  224. }
  225. },
  226. //选中诊断模板
  227. rowClick(row) {
  228. this.diagnosisTemplateId = row.id
  229. },
  230. //双击选诊断模板,并确认复制
  231. rowDblclick(row) {
  232. this.copyDiagnosisTemplate()
  233. },
  234. //复制诊断模板(确认选中诊断模板)
  235. copyDiagnosisTemplate() {
  236. if (!this.diagnosisTemplateId) {
  237. this.$message.warning({ showClose: true, message: "请先选择诊断模板!" })
  238. return
  239. }
  240. // 获取模板的诊断,并添加到已选
  241. postapi('/api/app/diagnosistemplatedetail/getdiagnosistemplateindiagnosis', { diagnosisTemplateId: this.diagnosisTemplateId })
  242. .then(res => {
  243. if (res.code > -1) {
  244. this.addAbs(res.data)
  245. this.diagnosisTemplateVisble = false
  246. }
  247. })
  248. },
  249. btnOk(closed) {
  250. if (this.diagnosis.dataAsbitemOCX && this.diagnosis.dataAsbitemOCX.length > 0) {
  251. switch (this.diagnosis.dataAsbitemOCX.length) {
  252. case 1:
  253. this.patientRegister.query.StatisticsOCX = this.diagnosis.dataAsbitemOCX[0].displayName
  254. break;
  255. default:
  256. this.patientRegister.query.StatisticsOCX = this.diagnosis.dataAsbitemOCX[0].displayName + ',… + ' + this.diagnosis.dataAsbitemOCX.length
  257. break;
  258. }
  259. } else {
  260. this.patientRegister.query.StatisticsOCX = ''
  261. }
  262. if (closed) {
  263. this.diagnosis.dialogAsbitemOCX = false
  264. }
  265. }
  266. },
  267. //监听事件
  268. watch: {
  269. },
  270. };
  271. </script>
  272. <style lang="scss" scoped>
  273. @import "../../assets/css/global.css";
  274. .mainareaBox {
  275. border: 1px solid #000;
  276. height: 400px;
  277. margin-top: 5px;
  278. }
  279. .btnList {
  280. margin-top: 5px;
  281. margin-left: 10px;
  282. margin-right: 10px;
  283. }
  284. .disTotal {
  285. margin-left: 10px;
  286. }
  287. </style>
  288. <style>
  289. .example .el-cascader-panel .el-radio {
  290. width: 100%;
  291. height: 100%;
  292. z-index: 10;
  293. position: absolute;
  294. top: 0px;
  295. right: 0px;
  296. }
  297. .example .el-cascader-panel .el-radio__input {
  298. /* margin-top: 10px;
  299. margin-left: 8px; */
  300. display: none;
  301. }
  302. .example .el-cascader-panel .el-cascader-node__postfix {
  303. top: 10px;
  304. }
  305. </style>