monthPrescriptionTable.vue 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div class="prescriptionTable">
  3. <el-table v-if="activeType == 1" :data="prescription.advices" border style="width: 99%;" :row-style="{ color: '#303133' }"
  4. :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)',color: '#606266'}" highlight-current-row>
  5. <el-table-column align="center" type="index" width="40" label="序号"></el-table-column>
  6. <el-table-column align="center" prop="drug_name" label="名称">
  7. <template slot-scope="scope"><span :title="scope.row.drug_name">{{ scope.row.drug_name }}</span></template>
  8. </el-table-column>
  9. <el-table-column align="center" prop="single_dose" width="90" label="单次用量">
  10. <template slot-scope="scope">
  11. <div style="display:flex;align-items:center;">
  12. <el-input v-model="scope.row.single_dose" style="width:65%;"></el-input>
  13. <div>{{scope.row.single_dose_unit}}</div>
  14. </div>
  15. </template>
  16. </el-table-column>
  17. <el-table-column align="center" prop="delivery_way" width="100" label="用法">
  18. <template slot-scope="scope">
  19. <el-select v-model="scope.row.delivery_way" placeholder="请选择">
  20. <el-option
  21. readonly
  22. v-for="(item,index) in drugways"
  23. :key="index"
  24. :label="item.name"
  25. :value="item.name">
  26. </el-option>
  27. </el-select>
  28. </template>
  29. </el-table-column>
  30. <el-table-column align="center" prop="execution_frequency" width="100" label="频率">
  31. <template slot-scope="scope">
  32. <el-select v-model="scope.row.execution_frequency" placehold er="请选择">
  33. <el-option
  34. readonly
  35. v-for="item,index in efs"
  36. :key="index"
  37. :label="item.name"
  38. :value="item.name">
  39. </el-option>
  40. </el-select>
  41. </template>
  42. </el-table-column>
  43. <el-table-column align="center" prop="day" width="50" label="天数">
  44. <template slot-scope="scope">
  45. <div style="display:flex;align-items:center;">
  46. <el-input v-model="scope.row.day" placeholder="" readonly></el-input>
  47. <span>{{'天'}}</span>
  48. </div>
  49. </template>
  50. </el-table-column>
  51. <el-table-column align="center" prop="prescribing_number" width="80" label="总量">
  52. <template slot-scope="scope">
  53. <div style="display:flex;align-items:center;">
  54. <el-input v-model="scope.row.prescribing_number" style="width:60%" placeholder="" readonly></el-input>{{scope.row.prescribing_number_unit}}
  55. </div>
  56. </template>
  57. </el-table-column>
  58. <el-table-column align="center" prop="retail_price" width="70" label="单价">
  59. <template slot-scope="scope">
  60. <div style="display:flex;align-items:center;">
  61. <el-input v-model="scope.row.retail_price" placeholder="" readonly></el-input>{{'元'}}
  62. </div>
  63. </template>
  64. </el-table-column>
  65. <el-table-column align="center" prop="remark" width="50" label="备注">
  66. <template slot-scope="scope">
  67. <el-input v-model="scope.row.remark" :title="scope.row.remark" placeholder="" readonly></el-input>
  68. </template>
  69. </el-table-column>
  70. </el-table>
  71. <el-table v-if="activeType == 2" :data="prescription.project" border style="width: 99%;" :row-style="{ color: '#303133' }"
  72. :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)',color: '#606266'}" highlight-current-row>
  73. <el-table-column align="center" type="index" width="40" label="序号"></el-table-column>
  74. <el-table-column align="center" prop="project_name" label="名称">
  75. <template slot-scope="scope"><span :title="scope.row.project_name">{{ scope.row.project_name }}</span></template>
  76. </el-table-column>
  77. <el-table-column align="center" prop="statistical_classification" width="100" label="组">
  78. <template slot-scope="scope">{{getGroup(scope.row.statistical_classification)}}</template>
  79. </el-table-column>
  80. <el-table-column align="center" prop="single_dose" width="80" label="单次用量">
  81. <template slot-scope="scope">
  82. <div style="display:flex;align-items:center;">
  83. <el-input v-model="scope.row.single_dose" placeholder="" readonly></el-input>
  84. <div>{{scope.row.unit}}</div>
  85. </div>
  86. </template>
  87. </el-table-column>
  88. <el-table-column align="center" prop="delivery_way" width="80" label="用法">
  89. <template slot-scope="scope">
  90. <el-autocomplete
  91. readonly
  92. style="width:100%;"
  93. class="inline-input"
  94. v-model="scope.row.delivery_way"
  95. :fetch-suggestions="querySearch2"
  96. placeholder="请输入内容"
  97. ></el-autocomplete>
  98. </template>
  99. </el-table-column>
  100. <el-table-column align="center" prop="execution_frequency" width="80" label="频率">
  101. <template slot-scope="scope">
  102. <el-input v-model="scope.row.execution_frequency" placeholder="" readonly></el-input>
  103. </template>
  104. </el-table-column>
  105. <el-table-column align="center" prop="number_days" width="50" label="天数">
  106. <template slot-scope="scope">
  107. <div style="display:flex;align-items:center;">
  108. <el-input v-model="scope.row.number_days" placeholder="" readonly></el-input>
  109. <div>{{'天'}}</div>
  110. </div>
  111. </template>
  112. </el-table-column>
  113. <el-table-column align="center" prop="total" width="70" label="总量">
  114. <template slot-scope="scope">
  115. <div style="display:flex;align-items:center;">
  116. <el-input v-model="scope.row.total" style="width:60%" placeholder="" readonly></el-input>
  117. <div>{{scope.row.unit}}</div>
  118. </div>
  119. </template>
  120. </el-table-column>
  121. <el-table-column align="center" prop="name" width="70" label="单价">
  122. <template slot-scope="scope">
  123. <div style="display:flex;align-items:center;">
  124. <el-input v-model="scope.row.price" placeholder="" readonly></el-input>
  125. <div>{{'元'}}</div>
  126. </div>
  127. </template>
  128. </el-table-column>
  129. <el-table-column align="center" prop="name" width="50" label="备注">
  130. <template slot-scope="scope">
  131. <el-input v-model="scope.row.remark" :title="scope.row.remark" readonly></el-input>
  132. </template>
  133. </el-table-column>
  134. </el-table>
  135. <div class="additionalBox">
  136. <div class="additionalOne" v-for="(item,index) in prescription.addition" :key="index">
  137. <span :title="item.item_name">{{item.item_name}}</span>
  138. <el-input v-model="item.price" placeholder="" style="width:50px;"></el-input>
  139. <el-input v-model="item.count" placeholder="" style="width:50px;"></el-input>
  140. <i class="el-icon-delete deleteIcon" @click="delAddition(index,item)"></i>
  141. </div>
  142. </div>
  143. </div>
  144. </template>
  145. <script>
  146. import { getDictionaryDataConfig} from "@/utils/data";
  147. import { getInitData,delHisAdvice,delHisProject,delHisAddition } from '@/api/his/his'
  148. export default {
  149. props: {
  150. preDrugs: Array,
  151. activeType: Number,
  152. addtions_charge:Array,
  153. prescription:{
  154. type:Object,
  155. default: function () {
  156. return {
  157. name:"",
  158. advices:[],
  159. project:[],
  160. drugways:[],
  161. efs:[],
  162. };
  163. }
  164. },
  165. },
  166. data() {
  167. return {
  168. advices:[],
  169. tableData: [],
  170. newoptions: [{
  171. value: '1',
  172. label: '1'
  173. }, {
  174. value: '2',
  175. label: '2'
  176. }, {
  177. value: '3',
  178. label: '3'
  179. }, {
  180. value: '4',
  181. label: '4'
  182. }, {
  183. value: '5',
  184. label: '5'
  185. }],
  186. value: '1',
  187. input: 1,
  188. efs:[],
  189. drugways:[]
  190. }
  191. },
  192. methods:{
  193. createFilter(queryString) {
  194. return (restaurant) => {
  195. return (restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0)
  196. }
  197. },
  198. querySearch2(queryString, cb) {
  199. var restaurants = this.getDictionaryDataConfig("system","project_use")
  200. restaurants.map(item => {
  201. item.value = item.name
  202. })
  203. var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants
  204. // 调用 callback 返回建议列表的数据
  205. cb(results)
  206. },
  207. getInitData(){
  208. getInitData().then(response => {
  209. if (response.data.state == 0) {
  210. this.$message.error(response.data.msg)
  211. return false
  212. } else {
  213. this.drugways = response.data.data.drugways
  214. this.efs = response.data.data.efs
  215. }
  216. })
  217. },
  218. deepClone(source) {
  219. if (!source && typeof source !== 'object') {
  220. throw new Error('error arguments', 'shallowClone')
  221. }
  222. const targetObj = source.constructor === Array ? [] : {}
  223. Object.keys(source).forEach((keys) => {
  224. if (source[keys] && typeof source[keys] === 'object') {
  225. targetObj[keys] = this.deepClone(source[keys])
  226. } else {
  227. targetObj[keys] = source[keys]
  228. }
  229. })
  230. return targetObj
  231. },
  232. setNewData:function(data){
  233. this.prescription = data
  234. },
  235. getDictionaryDataConfig(module, filed_name) {
  236. return getDictionaryDataConfig(module, filed_name)
  237. },
  238. getGroup(id){
  239. var name = ""
  240. var statistics_category = getDictionaryDataConfig('system','statistics_category')
  241. for(let i=0;i<statistics_category.length;i++){
  242. if(id == statistics_category[i].id){
  243. name = statistics_category[i].name
  244. }
  245. }
  246. return name
  247. },
  248. },mounted(){
  249. this.getInitData()
  250. },
  251. }
  252. </script>
  253. <style lang="scss">
  254. .prescriptionTable {
  255. .el-input__inner {
  256. padding: 0 5px;
  257. }
  258. .additionalBox {
  259. margin-top: 20px;
  260. display: flex;
  261. flex-wrap: wrap;
  262. .additionalOne {
  263. margin-right: 20px;
  264. margin-bottom: 10px;
  265. display: flex;
  266. align-items: center;
  267. > span {
  268. white-space: nowrap;
  269. overflow: hidden;
  270. text-overflow: ellipsis;
  271. width: 80px;
  272. display: inline-block;
  273. font-size: 14px;
  274. }
  275. .deleteIcon {
  276. color: red;
  277. margin-left: 5px;
  278. }
  279. }
  280. .el-table th .cell, .el-table td .cell {
  281. padding: 0 2px;
  282. white-space: pre-line;
  283. }
  284. .el-icon-delete {
  285. color: red;
  286. }
  287. }
  288. }
  289. </style>