edit.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <script>
  2. import {drugsMapUpdate} from "@/api/drugs/drugs";
  3. export default {
  4. components: {
  5. // 'v-selectpage': SelectPage
  6. },
  7. props: {
  8. communityId: {type: [String, Number], required: true},
  9. mechanismId: {type: [String, Number], required: true},
  10. },
  11. data() {
  12. return {
  13. dataset: [],
  14. searchTableForSystemColumns: [
  15. {title: "名称", data: "drugsName"},
  16. {title: "编码", data: "drugsId"},
  17. {title: "规格", data: "drugsSpecsName"},
  18. {title: "产地", data: "placeName"},
  19. {title: "零售价", data: "retail"},
  20. ],
  21. searchTableForMechanismColumns: [
  22. {title: "名称", data: "herbsName"},
  23. {title: "编码", data: "herbsCode"},
  24. {title: "规格", data: "specsName"},
  25. {title: "产地", data: "placeName"},
  26. ],
  27. editSystem: -1,
  28. editMechanism: -1,
  29. }
  30. },
  31. computed: {
  32. tableHeight() {
  33. return Math.min(Math.floor(window.innerHeight * 0.6), 598 + 2);
  34. },
  35. selected() {
  36. return this.dataset.filter(item => item && item.drugsId && item.herbsId);
  37. },
  38. },
  39. mounted() {
  40. const dataset = Array.from({length: 1 - this.dataset.length});
  41. for (const _ of dataset) this.append();
  42. },
  43. methods: {
  44. append(model) {
  45. this.dataset.push(model || {});
  46. },
  47. handleDelete(row, index) {
  48. this.dataset.splice(index, 1);
  49. },
  50. tableSpanMethod({row, column, rowIndex, columnIndex}) {
  51. if (column.type === 'index' || column.label === '操作') return [1, 1];
  52. if (columnIndex === 1) return row.drugsName ? [1, 1] : [1, 2];
  53. if (columnIndex === 2) return row.drugsName ? [1, 1] : [0, 0];
  54. if (columnIndex === 3) return row.herbsName ? [1, 1] : [1, 4];
  55. return row.herbsName ? [1, 1] : [0, 0];
  56. },
  57. async handle() {
  58. if (!this.selected.length) return this.msgInfo('请至少填写一条数据');
  59. const index = this.dataset.findIndex(item => (item.drugsId && !item.herbsId) || (item.herbsId && !item.drugsId));
  60. if (index !== -1) return this.msgInfo(`第 ${index + 1} 行数据请补充完整`);
  61. try {
  62. const {msg = '创建成功'} = await drugsMapUpdate(this.selected, {
  63. communityId: this.communityId,
  64. mechanismId: this.mechanismId,
  65. })
  66. this.msgSuccess(msg);
  67. this.$emit('close', true);
  68. } catch (error) {}
  69. },
  70. cancel() {
  71. this.$emit('close', false);
  72. },
  73. searchTableFormat(res) {
  74. try {
  75. if (res.rows) return {totalRow: res.total, list: res.rows};
  76. else return {totalRow: res.data.length, list: res.data};
  77. } catch (error) { return {totalRow: 0, list: []} }
  78. },
  79. selectSystem([value], row, index) {
  80. if (value) {
  81. row.drugsId = value.drugsId;
  82. row.drugsName = value.drugsName;
  83. row.drugsPriceId = value.priceId;
  84. row.drugsSpecsId = value.specsId;
  85. row.drugsSpecsName = value.drugsSpecsName;
  86. row.drugsPlaceId = value.placeId;
  87. row.drugsPlaceName = value.placeName;
  88. } else {
  89. delete row.drugsId;
  90. delete row.drugsName;
  91. delete row.drugsPriceId;
  92. delete row.drugsSpecsId;
  93. delete row.drugsSpecsName;
  94. delete row.drugsPlaceId;
  95. delete row.drugsPlaceName;
  96. this.dataset.splice(index, 1, row);
  97. }
  98. if (row.drugsId && row.herbsId) this.append();
  99. this.editSystem = -1;
  100. },
  101. selectMechanism([value], row, index) {
  102. if (value) {
  103. row.herbsId = value.id;
  104. row.herbsCode = value.herbsCode;
  105. row.herbsName = value.herbsName;
  106. row.herbsSpecsCode = value.specsCode;
  107. row.herbsSpecsName = value.specsName;
  108. row.herbsPlaceCode = value.placeCode;
  109. row.herbsPlaceName = value.placeName;
  110. } else {
  111. delete row.herbsId;
  112. delete row.herbsCode;
  113. delete row.herbsName;
  114. delete row.herbsSpecsCode;
  115. delete row.herbsSpecsName;
  116. delete row.herbsPlaceCode;
  117. delete row.herbsPlaceName;
  118. this.dataset.splice(index, 1, row);
  119. }
  120. if (row.drugsId && row.herbsId) this.append();
  121. this.editMechanism = -1;
  122. },
  123. },
  124. }
  125. </script>
  126. <template>
  127. <div class="wrapper">
  128. <el-table :data="dataset" style="width: 100%;" :height="tableHeight" stripe :span-method="tableSpanMethod">
  129. <el-table-column type="index" width="55" align="center" label="序号" fixed/>
  130. <el-table-column label="系统药品" align="center">
  131. <el-table-column prop="drugsName" label="名称" align="center">
  132. <template slot-scope="scope">
  133. <template v-if="scope.$index === editSystem || !scope.row.drugsId">
  134. <v-selectpage :tb-columns="searchTableForSystemColumns"
  135. key-field="drugsId" v-model="scope.row.drugsId"
  136. placeholder="请输入系统药品名称" title="系统药品"
  137. data="drugsSearchForSystem" :params="{}" :pagination="false"
  138. :result-format="searchTableFormat"
  139. @values="selectSystem($event, scope.row, scope.$index)"
  140. ></v-selectpage>
  141. </template>
  142. <a v-else>
  143. {{ scope.row.drugsName }}
  144. <i class="icon el-icon-circle-close" @click="selectSystem([], scope.row, scope.$index)"></i>
  145. </a>
  146. </template>
  147. </el-table-column>
  148. <el-table-column prop="drugsId" label="编码" align="center"></el-table-column>
  149. </el-table-column>
  150. <el-table-column label="医疗机构药品" align="center">
  151. <el-table-column prop="herbsName" label="名称" align="center">
  152. <template slot-scope="scope">
  153. <template v-if="scope.$index === editMechanism || !scope.row.herbsId">
  154. <v-selectpage :tb-columns="searchTableForMechanismColumns"
  155. key-field="id" v-model="scope.row.herbsId"
  156. placeholder="请输入医疗机构药品名称" title="医疗机构药品"
  157. data="drugsSearchForMechanism" :params="$props" :pagination="true"
  158. :result-format="searchTableFormat"
  159. @values="selectMechanism($event, scope.row, scope.$index)"
  160. ></v-selectpage>
  161. </template>
  162. <a v-else>
  163. {{ scope.row.herbsName }}
  164. <i class="icon el-icon-circle-close" @click="selectMechanism([], scope.row, scope.$index)"></i>
  165. </a>
  166. </template>
  167. </el-table-column>
  168. <el-table-column prop="herbsCode" label="编码" align="center"></el-table-column>
  169. <el-table-column prop="herbsSpecsName" label="规格" align="center"></el-table-column>
  170. <el-table-column prop="herbsSpecsCode" label="规格编码" align="center"></el-table-column>
  171. </el-table-column>
  172. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="80" fixed="right">
  173. <template slot-scope="scope">
  174. <el-button style="width: 40px;" type="danger" size="mini"
  175. :disabled="Object.keys(scope.row).length === 0"
  176. @click="handleDelete(scope.row, scope.$index)"
  177. >删除
  178. </el-button>
  179. </template>
  180. </el-table-column>
  181. </el-table>
  182. <div class="el-dialog__footer">
  183. <el-button type="primary" @click="handle" :disabled="selected.length === 0">保 存</el-button>
  184. <el-button @click="cancel">取 消</el-button>
  185. </div>
  186. </div>
  187. </template>
  188. <style scoped lang="scss">
  189. .icon {
  190. margin-top: 6px;
  191. float: right;
  192. &:hover {
  193. color: #00afff;
  194. }
  195. }
  196. </style>