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.

1067 lines
39 KiB

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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
  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="itemTypeIds" style="margin-left: 3px;width:160px;"
  7. :props="{ checkStrictly: true, expandTrigger: 'hover', ...customerOrg.treeprops, }" :show-all-levels="false"
  8. clearable filterable @change="getAsbItemByItemType" size="small">
  9. </el-cascader>
  10. </div>
  11. <div class="mainareaBox">
  12. <el-table :data="dict.asbItem"
  13. :height="(window.pageHeight > 720 ? (window.pageHeight - 460) : 260)" @row-dblclick="dbClickChoosedAsb" highlight-current-row
  14. @selection-change="handleSelectionChange" size="small" :row-class-name="handleRowClassName"
  15. @row-click="chooseAsbItem">
  16. <!--
  17. <el-table-column type="selection" align="center" width="40" />
  18. -->
  19. <el-table-column prop="displayName" label="未选组合项目" />
  20. <!--
  21. <el-table-column prop="price" label="标准价格" width="70">
  22. <template slot-scope="scope">
  23. <div style="text-align: center;">{{ scope.row.price }}</div>
  24. </template>
  25. </el-table-column>
  26. <el-table-column prop="forSexId" label="适用性别" width="70">
  27. <template slot-scope="scope">
  28. <div style="text-align: center;">{{ ldddw(dict.forSex, "id", scope.row.forSexId, "displayName") }}</div>
  29. </template>
  30. </el-table-column>
  31. -->
  32. </el-table>
  33. </div>
  34. </div>
  35. <div style="width:100px;margin-top: 70px;">
  36. <div class="btnList">
  37. <el-button type="primary" @click="addAbs(asbItemChoosed,'choosed')" style="width:90px;">添加 <i class="el-icon-arrow-right"></i>
  38. </el-button>
  39. </div>
  40. <div class="btnList">
  41. <el-button type="success" @click="addAbs(asbItemChoosed,'all')" style="width:90px;">全添加 <i class="el-icon-d-arrow-right"></i>
  42. </el-button>
  43. </div>
  44. <div class="btnList">
  45. <el-button type="warning" @click="delAbs(patientRegisterAbsChoosed,'choosed')" style="width:90px;"><i class="el-icon-arrow-left"> 移除</i>
  46. </el-button>
  47. </div>
  48. <div class="btnList">
  49. <el-button type="danger" @click="delAbs(patientRegisterAbsChoosed,'all')" style="width:90px;"><i class="el-icon-d-arrow-left"> 全移除</i>
  50. </el-button>
  51. </div>
  52. <!-- 不显示保存当已选组合有修改时失去焦点自动保存
  53. <div class="btnList">
  54. <el-button type="success" @click="onSubmit('保存')">保存 <i class="el-icon-check"></i>
  55. </el-button>
  56. </div>
  57. -->
  58. </div>
  59. <div :style="'width:' + (window.pageWidth - 120 - 30 - 230 - 100) + 'px;'">
  60. <div style="display: flex;">
  61. <div class="disTotal">
  62. <el-tooltip class="item" effect="dark" content="根据输入的折扣,自动计算折后总价" placement="top">
  63. <span>折扣 </span>
  64. </el-tooltip>
  65. <el-input style="width:55px;" v-model="discount" size="small" type="number" @input="changeAllDiscount"
  66. @focus="discountFoucs = true" @blur="discountFoucs = false" />
  67. </div>
  68. <div class="disTotal">
  69. <el-tooltip class="item" effect="dark" content="总金额即该人员此次体检实收金额,并根据此金额自动计算折扣" placement="top">
  70. <span>总金额 </span>
  71. </el-tooltip>
  72. <el-input style="width:70px;" v-model="total" size="small" type="number" @input="changeTotal" ref="total"
  73. @focus="totalFoucs = true" @blur="totalFoucs = false" />
  74. </div>
  75. <div class="disTotal">
  76. <el-select v-model="asbItemId" placeholder="快速选择组合项目" size="small" filterable clearable remote automatic-dropdown
  77. :remote-method="remoteMethod" @change="quickChoosedAsb" default-first-option ref="asbItemId"
  78. style="width:150px;text-align: left;padding-right: 15px;">
  79. <el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" />
  80. </el-select>
  81. </div>
  82. </div>
  83. <div class="mainareaBox">
  84. <el-table :data="patientRegister.patientRegisterAbs" highlight-current-row
  85. :height="(window.pageHeight > 720 ? (window.pageHeight - 460) : 260)" width="100%" :summary-method="getSummaries"
  86. show-summary :row-class-name="tableRowClassName" @row-dblclick="removeAbs" @selection-change="selecteditems" size="small"
  87. @row-click="removeAsbItem">
  88. <!-- temporaryselection personnelUnit.nogroupselected-->
  89. <!-- 取消勾选换成选中
  90. <el-table-column type="selection" align="center"/>
  91. -->
  92. <el-table-column label="已选组合项目" width="120" prop="asbitemName" />
  93. <el-table-column label="标准价格" prop="standardPrice" width="70" align="center" />
  94. <el-table-column label="折扣" prop="discount" width="60">
  95. <template slot-scope="scope">
  96. <el-input type="number" v-model="scope.row.discount" size="small" @input="changeDiscount(scope.$index)"
  97. @blur="onSubmit('')" />
  98. </template>
  99. </el-table-column>
  100. <el-table-column label="数量" prop="amount" width="50">
  101. <template slot-scope="scope">
  102. <el-input type="number" v-model="scope.row.amount" size="small" @blur="onSubmit('')" />
  103. </template>
  104. </el-table-column>
  105. <el-table-column label="实收价格" prop="chargePrice" width="70">
  106. <template slot-scope="scope">
  107. <el-input type="number" v-model="scope.row.chargePrice" size="small"
  108. @input="changePrice(scope.$index)" @blur="onSubmit('')" />
  109. </template>
  110. </el-table-column>
  111. <el-table-column prop="total" label="金额" width="70" v-if="false" />
  112. <el-table-column prop="standardPrice" label="标准金额" width="70" v-if="false" />
  113. <el-table-column label="支付方式" prop="payTypeFlag" width="100">
  114. <template slot-scope="scope">
  115. <el-select v-model="scope.row.payTypeFlag" size="small">
  116. <el-option v-for="item in dict.payType" :key="item.id" :label="item.displayName" :value="item.id" />
  117. </el-select>
  118. </template>
  119. </el-table-column>
  120. <el-table-column prop="isCharge" label="收费" width="50" align="center">
  121. <template slot-scope="scope">
  122. <el-checkbox :value="scope.row.isCharge == 'Y'" />
  123. </template>
  124. </el-table-column>
  125. <el-table-column prop="checkCompleteFlag" label="状态" align="center">
  126. <template slot-scope="scope">
  127. <div>{{ ldddw(dict.checkCompleteFlag, "id", scope.row.checkCompleteFlag, "displayName") }}</div>
  128. </template>
  129. </el-table-column>
  130. <el-table-column prop="isLock" label="锁" width="50" align="center">
  131. <template slot-scope="scope">
  132. <el-checkbox :value="scope.row.isLock == 'Y'" />
  133. </template>
  134. </el-table-column>
  135. <el-table-column prop="creatorName" label="登记人" align="center"></el-table-column>
  136. <el-table-column prop="creationTime" label="登记日期" width="90" align="center">
  137. <template slot-scope="scope">
  138. <div>{{ lmoment(scope.row.creationTime, 'yyyy-MM-DD') }}</div>
  139. </template>
  140. </el-table-column>
  141. </el-table>
  142. </div>
  143. </div>
  144. </div>
  145. </template>
  146. <script>
  147. import moment from 'moment';
  148. import { mapState, mapActions } from "vuex";
  149. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  150. import { arrayFilter, arrayReduce, arrayExistObj, dddw, deepCopy} from "../../utlis/proFunc";
  151. export default {
  152. props: ["patientRegisterForm","payTypeFlag"],
  153. data() {
  154. return {
  155. itemType: [], //项目类别
  156. itemTypeIds: '', //被选中的项目类别ID
  157. asbItemChoosed: [], //勾选的 未选组合项目
  158. startPoint:-1,
  159. //patientRegisterAbs:[], //体检人员所选组合项目 放vuex
  160. patientRegisterAbsChoosed: [], //勾选的 体检人员所选组合项目
  161. PstartPoint:-1,
  162. //patientRegisterAbsDel: [], //体检人员 待删除的组合项目
  163. // patientRegisterAbsRd: {
  164. // id: null, //更新不需传
  165. // asbitemId: null, // string($uuid) 组合项目
  166. // asbitemName: '', //组合项目名称,更新不需传
  167. // patientRegisterId: null, //string($uuid) 登记流水号
  168. // standardPrice: 0, //number($double) 标准价格
  169. // chargePrice: 0, // number($double) 实收价格
  170. // payTypeFlag: "0", // string 支付方式,比如是自费、免费、单位支付 0自费、2免费、1单位支付
  171. // isCharge: "N", // string 是否已收费
  172. // //lisRequestId: null, // string($uuid)LIS申请ID
  173. // amount: 1, // integer($int32) 数量
  174. // groupPackageId: null, // string($uuid) 分组或者套餐ID
  175. // }, //单个添加的组合项目
  176. asbItemId: '',
  177. discount: 100,
  178. total: 0,
  179. totalStand: 0,
  180. quickAsb: [],
  181. totalFoucs: false, //总价是否获取焦点
  182. discountFoucs: false, //总折扣是否获取焦点
  183. };
  184. },
  185. computed: {
  186. ...mapState(["window", "dict", "customerOrg", "patientRegister", "personnelUnit"]),
  187. },
  188. mounted() {
  189. // if(this.patientRegisterForm.id){
  190. // this.getPatientRegisterAbs(this.patientRegisterForm.id)
  191. // }else{
  192. // this.getPatientRegisterAbs()
  193. // }
  194. },
  195. methods: {
  196. ...mapActions(['getCustomerOrgGroup', 'getPatientRegisterAbs']),
  197. ldddw(arrayData, key, value, display) {
  198. return dddw(arrayData, key, value, display);
  199. },
  200. lmoment(date, forMat) {
  201. return moment(new Date(date)).format(forMat);
  202. },
  203. tableRowClassName({row, rowIndex}){
  204. //console.log(row)
  205. if (row.choosed) {
  206. return 'current-row';
  207. } else {
  208. if (row.groupPackageId) {
  209. //console.log('row.groupPackageId',row.groupPackageId)
  210. return 'purple-row'; //分组或套餐
  211. }else{
  212. return '';
  213. }
  214. }
  215. },
  216. handleRowClassName({ row, rowIndex }) {
  217. // highLightBg 为 'selected'的高亮
  218. //console.log(rowIndex, row)
  219. //return row.highLightBg == 'selected' ? 'high-light-bg' : '';
  220. if (row.choosed) {
  221. return 'current-row';
  222. } else {
  223. return '';
  224. }
  225. },
  226. //选择 未选的组合项目
  227. chooseAsbItem(row){
  228. this.dict.asbItem.forEach((e,index) => {
  229. e.index = index;
  230. return e
  231. });
  232. // 按住了shift键
  233. if (this.window.shift) {
  234. //清除所有选择
  235. this.dict.asbItem.forEach(e => {
  236. e.choosed = false;
  237. return e
  238. });
  239. if (this.startPoint == - 1) {
  240. this.dict.asbItem[row.index].choosed = true;
  241. this.startPoint = row.index;
  242. return
  243. }
  244. if (this.startPoint > row.index) {
  245. for (let i = row.index; i <= this.startPoint; i++) {
  246. this.dict.asbItem[i].choosed = true
  247. }
  248. } else if (this.startPoint <= row.index) {
  249. for (let i = this.startPoint; i <= row.index; i++) {
  250. this.dict.asbItem[i].choosed = true
  251. }
  252. }
  253. return
  254. }
  255. // 按住了ctrl 键
  256. if (this.window.ctrl) {
  257. console.log('this.window.ctrl',this.window.ctrl,this.dict.asbItem)
  258. this.dict.asbItem[row.index].choosed = true;
  259. this.startPoint = row.index;
  260. return
  261. }
  262. // 未按住了ctrl 、shift 键
  263. //清除所有选择
  264. //console.log('清除所有选择')
  265. this.dict.asbItem.forEach(e => {
  266. e.choosed = false;
  267. return e
  268. });
  269. this.dict.asbItem[row.index].choosed = true;
  270. this.startPoint = row.index;
  271. },
  272. //选择 已选的组合项目
  273. removeAsbItem(row){
  274. this.patientRegister.patientRegisterAbs.forEach((e,index) => {
  275. e.index = index;
  276. return e
  277. });
  278. // 按住了shift键
  279. if (this.window.shift) {
  280. //清除所有选择
  281. this.patientRegister.patientRegisterAbs.forEach(e => {
  282. e.choosed = false;
  283. return e
  284. });
  285. if (this.PstartPoint == - 1) {
  286. this.patientRegister.patientRegisterAbs[row.index].choosed = true;
  287. this.PstartPoint = row.index;
  288. return
  289. }
  290. if (this.PstartPoint > row.index) {
  291. for (let i = row.index; i <= this.PstartPoint; i++) {
  292. this.patientRegister.patientRegisterAbs[i].choosed = true
  293. }
  294. } else if (this.PstartPoint <= row.index) {
  295. for (let i = this.PstartPoint; i <= row.index; i++) {
  296. this.patientRegister.patientRegisterAbs[i].choosed = true
  297. }
  298. }
  299. return
  300. }
  301. // 按住了ctrl 键
  302. if (this.window.ctrl) {
  303. console.log('this.window.ctrl',this.window.ctrl,this.patientRegister.patientRegisterAbs)
  304. this.patientRegister.patientRegisterAbs[row.index].choosed = true;
  305. this.PstartPoint = row.index;
  306. return
  307. }
  308. // 未按住了ctrl 、shift 键
  309. //清除所有选择
  310. //console.log('清除所有选择')
  311. this.patientRegister.patientRegisterAbs.forEach(e => {
  312. e.choosed = false;
  313. return e
  314. });
  315. this.patientRegister.patientRegisterAbs[row.index].choosed = true;
  316. this.PstartPoint = row.index;
  317. },
  318. //保存按钮
  319. // [
  320. // {
  321. // "registerAsbitemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  322. // "input": {
  323. // "chargePrice": 0,
  324. // "payTypeFlag": "string",
  325. // "isCharge": "string",
  326. // "amount": 0,
  327. // "groupPackageId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  328. // }
  329. // }
  330. // ]
  331. //批量更新组合项目
  332. async batchEditAsb(body, msg) {
  333. console.log(`/api/app/registerasbitem/updatemany`, body)
  334. await postapi(`/api/app/registerasbitem/updatemany`, body)
  335. .then((res) => {
  336. console.log("batchEditAsb", res);
  337. if (res.code == 1) {
  338. if (msg) {
  339. //未选项目中移除,已选项中添加
  340. this.getPatientRegisterAbs(this.patientRegisterForm.id)
  341. this.$message.success(`${msg}操作成功`);
  342. }
  343. }
  344. })
  345. .catch((err) => {
  346. this.$message({ type: "error", message: `${msg}操作失败,原因:${err}` });
  347. });
  348. },
  349. //更新所选组合项目
  350. async onSubmit(msg) {
  351. let body = [], insBody = []
  352. if (!this.patientRegisterForm.id) {
  353. //this.$message.warning("请先保存人员体检基本信息!")
  354. return
  355. }
  356. if (this.patientRegister.patientRegisterAbs.length < 1) {
  357. //this.$message.warning("暂无可操作的数据")
  358. return
  359. }
  360. for (let i = 0; i < this.patientRegister.patientRegisterAbs.length; i++) {
  361. if (this.patientRegister.patientRegisterAbs[i].id) {
  362. body.push({
  363. registerAsbitemId: this.patientRegister.patientRegisterAbs[i].id,
  364. input: {
  365. chargePrice: this.patientRegister.patientRegisterAbs[i].chargePrice,
  366. payTypeFlag: this.patientRegister.patientRegisterAbs[i].payTypeFlag,
  367. isCharge: this.patientRegister.patientRegisterAbs[i].isCharge,
  368. amount: this.patientRegister.patientRegisterAbs[i].amount,
  369. groupPackageId: this.patientRegister.patientRegisterAbs[i].groupPackageId
  370. }
  371. })
  372. } else {
  373. insBody.push({
  374. asbitemId: this.patientRegister.patientRegisterAbs[i].asbitemId,
  375. patientRegisterId: this.patientRegisterForm.id,
  376. standardPrice: this.patientRegister.patientRegisterAbs[i].standardPrice,
  377. chargePrice: this.patientRegister.patientRegisterAbs[i].chargePrice,
  378. payTypeFlag: this.patientRegister.patientRegisterAbs[i].payTypeFlag,
  379. isCharge: this.patientRegister.patientRegisterAbs[i].isCharge,
  380. amount: this.patientRegister.patientRegisterAbs[i].amount,
  381. groupPackageId: this.patientRegister.patientRegisterAbs[i].groupPackageId
  382. })
  383. }
  384. }
  385. //if (body.length > 0 ) await this.batchEditAsb(body, msg);
  386. //console.log('111111', msg, body.length, body, insBody.length, insBody);
  387. if (body.length > 0 && insBody.length > 0) {
  388. await this.batchEditAsb(body, '');
  389. await this.batchAddAsb(insBody, msg);
  390. } else if (body.length > 0 && insBody.length < 1) {
  391. await this.batchEditAsb(body, msg);
  392. } else if (body.length < 1 && insBody.length > 0) {
  393. await this.batchAddAsb(insBody, msg);
  394. }
  395. },
  396. //未选组合项目 勾选情况
  397. handleSelectionChange(val) {
  398. // this.selecteddata = val;
  399. this.asbItemChoosed = val;
  400. //console.log(this.asbItemChoosed);
  401. },
  402. //批量添加组合项目
  403. async batchAddAsb(registerAsbitems, msg) {
  404. let body = {
  405. organizationUnitId:this.patientRegisterForm.organizationUnitId,
  406. registerAsbitems
  407. }
  408. if(this.patientRegisterForm.organizationUnitId.id){
  409. body.isAutoMerger = 'N'
  410. }
  411. //console.log(`/api/app/registerasbitem/createregisterasbitemmany`, body)
  412. await postapi('/api/app/registerasbitem/createregisterasbitemmany', body)
  413. .then((res) => {
  414. console.log("batchAddAsb", res);
  415. if (res.code == 1) {
  416. //未选项目中移除,已选项中添加
  417. this.getPatientRegisterAbs(this.patientRegisterForm.id)
  418. if (msg) this.$message.success(`${msg}操作成功`);
  419. }
  420. })
  421. .catch((err) => {
  422. this.$message({ type: "error", message: `${msg}操作失败,原因:${err}` });
  423. });
  424. },
  425. // 添加组合项目
  426. ///api/app/register-asbitem/many/3fa85f64-5717-4562-b3fc-2c963f66afa6'
  427. async addAbs(asbItemChoosed,oprType) {
  428. let body = []
  429. let checked = true
  430. let payTypeFlag = '0' //默认个人支付
  431. let lfind = -1
  432. //勾选时不需要此操作 start
  433. if(oprType && oprType == 'all'){
  434. asbItemChoosed = deepCopy(this.dict.asbItem)
  435. }else if(oprType && oprType == 'choosed'){
  436. asbItemChoosed = []
  437. this.dict.asbItem.forEach(e =>{
  438. if(e.choosed){
  439. asbItemChoosed.push(e)
  440. e.choosed = false
  441. }
  442. })
  443. }
  444. //勾选时不需要此操作 end
  445. if (asbItemChoosed.length < 1) {
  446. this.$message.warning("请选择要添加的组合项目")
  447. return
  448. }
  449. //性别、年龄判断
  450. // "displayName": "身高体重",
  451. // "shortName": "哈f哈",
  452. // "forSexId": "F",
  453. // "itemTypeId": "3a0b16de-75b9-c910-c61b-844709a88940",
  454. // "price": 0,
  455. console.log('asbItemChoosed.length', asbItemChoosed.length)
  456. for (let i = 0; i < asbItemChoosed.length; i++) {
  457. if (this.patientRegisterForm.sexId == 'U') break //未选性别时,无需判断组合项目性别限制
  458. if (asbItemChoosed[i].forSexId == 'A') continue
  459. if (asbItemChoosed[i].forSexId != this.patientRegisterForm.sexId) {
  460. this.$message.warning(`所选项目:${asbItemChoosed[i].displayName},不适合当前人员性别`)
  461. checked = false
  462. break
  463. }
  464. }
  465. //console.log(222,checked)
  466. if (!checked) return
  467. if (this.patientRegisterForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1'
  468. for (let i = 0; i < asbItemChoosed.length; i++) {
  469. let pojo = {
  470. asbitemId: asbItemChoosed[i].id,
  471. patientRegisterId: this.patientRegisterForm.id,
  472. standardPrice: asbItemChoosed[i].price,
  473. chargePrice: asbItemChoosed[i].price,
  474. payTypeFlag,
  475. isCharge: "N",
  476. amount: 1,
  477. total: asbItemChoosed[i].price,
  478. }
  479. body.push(pojo)
  480. this.patientRegister.patientRegisterAbs.push({ ...pojo, asbitemName: asbItemChoosed[i].displayName })
  481. lfind = arrayExistObj(this.dict.asbItem, 'id', asbItemChoosed[i].id)
  482. if (lfind > -1) this.dict.asbItem.splice(lfind, 1)
  483. lfind = arrayExistObj(this.dict.asbItemQuick, 'id', asbItemChoosed[i].id)
  484. if (lfind > -1) this.dict.asbItemQuick.splice(lfind, 1)
  485. }
  486. if (this.patientRegisterForm.id) await this.batchAddAsb(body, '添加组合项目');
  487. },
  488. //人员已选组合项目 勾选情况
  489. selecteditems(val) {
  490. this.patientRegisterAbsChoosed = val
  491. },
  492. //批量删除组合项目
  493. async batchDelAsb(body, msg) {
  494. console.log(`/api/app/registerasbitem/deletemany`, body)
  495. await postapi(`/api/app/registerasbitem/deletemany`, body)
  496. .then((res) => {
  497. console.log("delAbs", res);
  498. if (res.code != -1) {
  499. //项目类别过滤 组合项目,未过滤已选择的组合项目
  500. this.getAsbItemByItemTypeAll()
  501. if (msg) {
  502. //未选项目中移除,已选项中添加
  503. this.getPatientRegisterAbs(this.patientRegisterForm.id)
  504. this.$message.success(`${msg}操作成功`);
  505. }
  506. }
  507. })
  508. .catch((err) => {
  509. this.$message({ type: "error", message: `${msg}操作失败,原因:${err}` });
  510. });
  511. },
  512. //删除 人员已选中的组合项目
  513. ///api/app/register-asbitem/many?RegisterAsbitemIds=3fa85f64-5717-4562-b3fc-2c963f66afa6
  514. delAbs(absForDel,oprType) {
  515. let body = {}
  516. let registerAsbitemIds = []
  517. let chargeComplete = ''
  518. let lfind = -1
  519. //勾选时不需要此操作 start
  520. if(oprType && oprType == 'all'){
  521. absForDel = deepCopy(this.patientRegister.patientRegisterAbs)
  522. }else if(oprType && oprType == 'choosed'){
  523. absForDel = []
  524. this.patientRegister.patientRegisterAbs.forEach(e =>{
  525. if(e.choosed){
  526. absForDel.push(e)
  527. e.choosed = false
  528. }
  529. })
  530. }
  531. //勾选时不需要此操作 end
  532. if (absForDel.length < 1) {
  533. this.$message.warning("请选择要移除的组合项目")
  534. return
  535. }
  536. for (let i = 0; i < absForDel.length; i++) {
  537. //未在数据库中,直接删除
  538. if (!absForDel[i].id) {
  539. lfind = arrayExistObj(this.patientRegister.patientRegisterAbs, 'asbitemId', absForDel[i].asbitemId)
  540. if (lfind > -1) this.patientRegister.patientRegisterAbs.splice(lfind, 1)
  541. absForDel.splice(i, 1)
  542. i--
  543. continue
  544. }
  545. if (absForDel[i].isCharge == 'Y' || absForDel[i].checkCompleteFlag != '0') {
  546. chargeComplete += absForDel[i].asbitemName + ','
  547. absForDel.splice(i, 1)
  548. i--
  549. }
  550. }
  551. //刷新
  552. this.getAsbItemByItemType()
  553. if (chargeComplete) {
  554. this.$message({ type: "info", message: `所选项目:${chargeComplete}已收费或已检,不可删除!` });
  555. if (absForDel.length < 1) return
  556. }
  557. for (let i = 0; i < absForDel.length; i++) {
  558. registerAsbitemIds.push(absForDel[i].id)
  559. }
  560. body = { registerAsbitemIds }
  561. if (registerAsbitemIds.length > 0 && this.patientRegisterForm.id) this.batchDelAsb(body, '删除组合项目');
  562. },
  563. //双击删除已选项目
  564. removeAbs(row) {
  565. this.delAbs([row]);
  566. },
  567. //项目类别过滤 组合项目,未过滤已选择的组合项目
  568. getAsbItemByItemTypeAll() {
  569. //console.log('getAsbItemByItemType', typeof this.itemTypeIds, this.itemTypeIds)
  570. let lv = "";
  571. if (typeof this.itemTypeIds === "object") {
  572. lv = this.itemTypeIds[this.itemTypeIds.length - 1];
  573. }
  574. if (lv) {
  575. this.dict.asbItem = arrayFilter(this.dict.asbItemAll, "itemTypeId", lv);
  576. } else {
  577. this.dict.asbItem = [...this.dict.asbItemAll];
  578. }
  579. //console.log('lv,this.dict.asbItem', lv, this.dict.asbItem)
  580. this.dict.asbItemQuick = [...this.dict.asbItemAll];
  581. },
  582. //按项目类别显示组合项目,并过滤已选择的组合项目
  583. getAsbItemByItemType() {
  584. this.getAsbItemByItemTypeAll()
  585. //刷新显示 未选组合项目
  586. arrayReduce(this.dict.asbItem, [...this.patientRegister.patientRegisterAbs], "id=asbitemId");
  587. arrayReduce(this.dict.asbItemQuick, [...this.patientRegister.patientRegisterAbs], "id=asbitemId");
  588. },
  589. //体检登记的组合项目创建
  590. // registerAsbitem(body) {
  591. // console.log("registerAsbitem");
  592. // postapi(
  593. // `/api/app/register-asbitem?CustomerOrgId=${this.patientRegisterForm.customerOrgId}`,
  594. // body
  595. // ).then((res) => {
  596. // console.log("medicalPackageAsb", res);
  597. // if (res.code == 1) {
  598. // //未选项目中移除,已选项中添加
  599. // }
  600. // });
  601. // },
  602. //选中分组所包含的组合项目
  603. // async getCustomerOrgGroupAsb(customerOrgGroupId) {
  604. // console.log(`getCustomerOrgGroupAsb /api/app/customer-org-group-detail/customer-org-group-detail-in-asbitem/${customerOrgGroupId}`);
  605. // getapi(`/api/app/customer-org-group-detail/customer-org-group-detail-in-asbitem/${customerOrgGroupId}`)
  606. // .then((res) => {
  607. // console.log("getCustomerOrgGroupAsb", res);
  608. // if (res.code == 1) {
  609. // this.patientRegister.customerOrgGroupAsb = res.data;
  610. // //移除旧分组或套餐的组合项目
  611. // this.removeGroupPackageAsb();
  612. // //添加新分组的组合项目;
  613. // this.addCustomerOrgGroupAsb(customerOrgGroupId);
  614. // }
  615. // });
  616. // },
  617. //选中 套餐/分组 所包含的组合项目
  618. getGroupPackageAsb(typeFlag, groupPackageId) {
  619. let delBody = {};
  620. let url = typeFlag == 'group' ?
  621. '/api/app/customer-org-group-detail/customer-org-group-detail-in-asbitem/'
  622. : '/api/app/medical-package-detail/medical-package-in-asbitem?MedicalPackageId=';
  623. let msg = typeFlag == 'group' ? '更换分组' : '更换套餐';
  624. console.log(`${url}${groupPackageId}`);
  625. getapi(`${url}${groupPackageId}`)
  626. .then((res) => {
  627. console.log("getGroupPackageAsb", res);
  628. if (res.code != -1) {
  629. //this.patientRegister.medicalPackageAsb = res.data;
  630. //return this.promiseRemoveGroupPackageAsb();
  631. //移除旧分组或套餐的组合项目
  632. delBody = this.removeGroupPackageAsb();
  633. //添加或更新已选组合项目
  634. this.addGroupPackageAsb(res.data, groupPackageId);
  635. //console.log('delBody', delBody,delBody['registerAsbitemIds'].length);
  636. if (delBody['registerAsbitemIds'].length > 0) {
  637. return postapi(`/api/app/registerasbitem/deletemany`, delBody)
  638. } else {
  639. this.onSubmit(msg);
  640. }
  641. }
  642. })
  643. .then(res => {
  644. //console.log('res', res);
  645. if (res && res.code != -1) {
  646. //添加新套餐的组合项目
  647. this.onSubmit(msg);
  648. }
  649. });
  650. },
  651. //添加新套餐/分组的组合项目
  652. addGroupPackageAsb(groupPackageAsb, groupPackageId) {
  653. let payTypeFlag = '0'; //默认个人支付
  654. let lfind = -1
  655. if (this.patientRegisterForm.customerOrgId != this.dict.personOrgId) payTypeFlag = '1' //单位支付
  656. for (let i = 0; i < groupPackageAsb.length; i++) {
  657. lfind = arrayExistObj(this.patientRegister.patientRegisterAbs, 'asbitemId', groupPackageAsb[i].id)
  658. if (lfind > - 1) {
  659. this.patientRegister.patientRegisterAbs[lfind].groupPackageId = groupPackageId
  660. editCount++
  661. continue
  662. }
  663. let pojo = {
  664. asbitemId: groupPackageAsb[i].id,
  665. patientRegisterId: this.patientRegisterForm.id,
  666. standardPrice: groupPackageAsb[i].price,
  667. chargePrice: groupPackageAsb[i].price,
  668. payTypeFlag,
  669. discount: 100,
  670. isCharge: "N",
  671. amount: 1,
  672. groupPackageId: groupPackageId
  673. }
  674. this.patientRegister.patientRegisterAbs.push({ ...pojo, asbitemName: groupPackageAsb[i].displayName })
  675. }
  676. },
  677. //移除旧分组或套餐的组合项目
  678. removeGroupPackageAsb() {
  679. let body = { registerAsbitemIds: [] }
  680. let registerAsbitemIds = []
  681. let chargeComplete = ''
  682. //体检基本信息未保存时,删除所有所选项目
  683. if (!this.patientRegisterForm.id) {
  684. this.patientRegister.patientRegisterAbs = [];
  685. return body;
  686. }
  687. //删除已选 分组或套餐的组合项目 ,如已收费或 已检时,将 groupPackageId 置为null
  688. for (let i = 0; i < this.patientRegister.patientRegisterAbs.length; i++) {
  689. if (!this.patientRegister.patientRegisterAbs[i].id) {
  690. this.patientRegister.patientRegisterAbs.splice(i, 1)
  691. i--
  692. continue
  693. }
  694. if (this.patientRegister.patientRegisterAbs[i].isCharge == 'Y' || this.patientRegister.patientRegisterAbs[i].checkCompleteFlag != '0') {
  695. chargeComplete += this.patientRegister.patientRegisterAbs[i].asbitemName + ','
  696. this.patientRegister.patientRegisterAbs[i].groupPackageId = null
  697. } else {
  698. //数据库有,才添加到待删除的数组中
  699. if (this.patientRegister.patientRegisterAbs[i].id) {
  700. registerAsbitemIds.push(this.patientRegister.patientRegisterAbs[i].id)
  701. }
  702. this.patientRegister.patientRegisterAbs.splice(i, 1)
  703. i--
  704. }
  705. }
  706. if (chargeComplete) {
  707. this.$message({ type: "info", message: `所选项目:${chargeComplete}已收费或已检,不可删除!` });
  708. }
  709. body = { registerAsbitemIds };
  710. return body;
  711. },
  712. //双击选择组合项目
  713. dbClickChoosedAsb(row) {
  714. this.addAbs([row]);
  715. },
  716. //快速选择组合项目
  717. quickChoosedAsb(v) {
  718. //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
  719. let lfind = -1
  720. if (v) {
  721. lfind = arrayExistObj(this.dict.asbItemQuick, 'id', v)
  722. if (lfind > -1) {
  723. this.addAbs([this.dict.asbItemQuick[lfind]])
  724. }
  725. }
  726. },
  727. // quickChoosedAsb(v){
  728. // let lfind = -1
  729. // let asbItemChoosed = []
  730. // console.log('quickChoosedAsb',v,this.dict.asbItemQuick)
  731. // if(v){
  732. // lfind = arrayExistObj(this.dict.asbItemQuick,'id',v)
  733. // if(lfind > -1){
  734. // asbItemChoosed.push(this.dict.asbItemQuick[lfind])
  735. // this.addAbs(asbItemChoosed)
  736. // }
  737. // }
  738. // },
  739. //快速选择组合项目时,调整可按拼间简码及简称查找
  740. remoteMethod(keyWords) {
  741. //console.log('remoteMethod',this.dict.asbItemQuick)
  742. if (keyWords) {
  743. this.quickAsb = [];
  744. this.dict.asbItemQuick.forEach(item => {
  745. if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  746. || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
  747. || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1) {
  748. this.quickAsb.push(item);
  749. }
  750. });
  751. } else {
  752. this.quickAsb = [...this.dict.asbItemQuick];
  753. }
  754. },
  755. //修改总折扣
  756. changeAllDiscount() {
  757. if (!this.discount || this.discount == 0) return
  758. if (!this.patientRegister.patientRegisterAbs || this.patientRegister.patientRegisterAbs.length == 0) return
  759. this.patientRegister.patientRegisterAbs.forEach(e => {
  760. e.discount = this.discount
  761. e.chargePrice = (e.standardPrice * this.discount / 100).toFixed(2)
  762. e.total = (e.standardPrice * this.discount * e.amount / 100).toFixed(2)
  763. return e
  764. });
  765. this.onSubmit('')
  766. },
  767. //修改总金额
  768. changeTotal() {
  769. if (!this.total) return
  770. if (!this.patientRegister.patientRegisterAbs || this.patientRegister.patientRegisterAbs.length == 0) return
  771. let sumChargeDetails = 0 //单个标准价折后价 合计总计
  772. let qtyIsOneLast = 0 //数量为1的最后行项目,用于返写金额
  773. this.discount = (100 * this.total / this.totalStand).toFixed(2)
  774. this.patientRegister.patientRegisterAbs.forEach((e, index) => {
  775. if (e.amount == 1) qtyIsOneLast = index
  776. e.discount = this.discount
  777. e.chargePrice = (e.standardPrice * this.discount / 100).toFixed(2)
  778. e.total = (e.standardPrice * this.discount * e.amount / 100).toFixed(2)
  779. sumChargeDetails += Number((e.standardPrice * this.discount * e.amount / 100).toFixed(2))
  780. return e
  781. });
  782. console.log('this.total - sumChargeDetails', sumChargeDetails, this.total - sumChargeDetails)
  783. if (this.total != sumChargeDetails) {
  784. this.patientRegister.patientRegisterAbs[qtyIsOneLast].chargePrice
  785. = (Number(this.patientRegister.patientRegisterAbs[qtyIsOneLast].chargePrice)
  786. + Number((this.total - sumChargeDetails) / this.patientRegister.patientRegisterAbs[qtyIsOneLast].amount)).toFixed(2)
  787. }
  788. this.onSubmit('')
  789. },
  790. //修改数量
  791. changeDiscount(index) {
  792. //console.log('index',index)
  793. if (!this.patientRegister.patientRegisterAbs || this.patientRegister.patientRegisterAbs.length == 0) return
  794. if (!this.patientRegister.patientRegisterAbs[index].discount) return
  795. //console.log(this.patientRegister.patientRegisterAbs[index].chargePrice,this.patientRegister.patientRegisterAbs[index].standardPrice)
  796. this.patientRegister.patientRegisterAbs[index].chargePrice = Number(this.patientRegister.patientRegisterAbs[index].standardPrice * this.patientRegister.patientRegisterAbs[index].discount / 100).toFixed(2)
  797. this.onSubmit('')
  798. },
  799. //修改单价
  800. changePrice(index) {
  801. //console.log('index',index)
  802. if (!this.patientRegister.patientRegisterAbs || this.patientRegister.patientRegisterAbs.length == 0) return
  803. if (!this.patientRegister.patientRegisterAbs[index].chargePrice) return
  804. //console.log(this.patientRegister.patientRegisterAbs[index].chargePrice,this.patientRegister.patientRegisterAbs[index].standardPrice)
  805. this.patientRegister.patientRegisterAbs[index].discount = Number(this.patientRegister.patientRegisterAbs[index].chargePrice * 100 / this.patientRegister.patientRegisterAbs[index].standardPrice).toFixed(2)
  806. this.onSubmit('')
  807. },
  808. //自定义计算列
  809. getSummaries(param) {
  810. const { columns, data } = param;
  811. const sumCol = [2, 5] //需合计的列
  812. const sums = [];
  813. columns.forEach((column, index) => {
  814. //console.log('column, index,data',column, index,data)
  815. //显示合计列
  816. if (index === 1) {
  817. sums[index] = '合计';
  818. return;
  819. }
  820. //不合计的列
  821. if (sumCol.indexOf(index) == -1) {
  822. sums[index] = '';
  823. return;
  824. }
  825. sums[index] = 0
  826. data.forEach(e => {
  827. if (!isNaN(e[column.property])) sums[index] += e[column.property] * e['amount']
  828. })
  829. sums[index] = sums[index].toFixed(2) //+ ' 元';
  830. // const values = data.map(item => Number(item[column.property]));
  831. // if (!values.every(value => isNaN(value))) {
  832. // sums[index] = values.reduce((prev, curr) => {
  833. // const value = Number(curr);
  834. // if (!isNaN(value)) {
  835. // //return prev + curr; //原始
  836. // return prev + curr; //改造
  837. // } else {
  838. // return prev;
  839. // }
  840. // }, 0);
  841. // sums[index] = sums[index].toFixed(2) + ' 元';
  842. // } else {
  843. // sums[index] = 'N/A';
  844. // }
  845. });
  846. this.totalStand = sums[2];
  847. //console.log('this.totalFoucs/this.discountFoucs',this.totalFoucs,this.discountFoucs)
  848. if (!this.totalFoucs) this.total = sums[5];
  849. if (!this.discountFoucs) this.discount = Number(this.total * 100 / this.totalStand).toFixed(2);
  850. return sums;
  851. },
  852. },
  853. //监听事件
  854. watch: {
  855. //分组改变,查出当前分组下对应的组合项目
  856. "patientRegister.customerOrgGroupChange"(newVal, oldVal) {
  857. console.log("watch patientRegister.customerOrgGroupChange newVal:", newVal, " oldVal:", oldVal);
  858. if (newVal != oldVal && newVal > 0) {
  859. //this.getCustomerOrgGroupAsb(this.patientRegisterForm.customerOrgGroupId);
  860. this.getGroupPackageAsb('group', this.patientRegisterForm.customerOrgGroupId);
  861. }
  862. },
  863. //套餐改变,查出当前套餐下对应的组合项目
  864. "patientRegister.medicalPackageChange"(newVal, oldVal) {
  865. console.log("watch patientRegister.medicalPackageChange newVal:", newVal, " oldVal:", oldVal);
  866. if (newVal != oldVal && newVal > 0) {
  867. //this.getMedicalPackageAsb(this.patientRegisterForm.medicalPackageId);
  868. this.getGroupPackageAsb('medical', this.patientRegisterForm.medicalPackageId);
  869. }
  870. },
  871. //体检信息保存,触发已选组合项目保存
  872. "patientRegister.saveTimes"(newVal, oldVal) {
  873. console.log("patientRegister.saveTimes newVal:", newVal, " oldVal:", oldVal);
  874. if (newVal != oldVal) {
  875. this.onSubmit('');
  876. }
  877. },
  878. //快速选择完后,重新将光标定位到 asbItemId
  879. "asbItemId"(newVal, oldVal) {
  880. if (newVal != oldVal && newVal != '') {
  881. //重新定位光标
  882. this.$nextTick(() => {
  883. console.log("1this.$refs['asbItemId'].focus()");
  884. this.$refs['asbItemId'].focus(); //total asbItemId
  885. console.log("2this.$refs['asbItemId'].focus()");
  886. });
  887. }
  888. },
  889. // 在人员列表处已 getPatientRegisterAbs ,此处无需再监听
  890. // "patientRegisterForm.id"(newVal, oldVal) {
  891. // if (newVal && newVal != oldVal) {
  892. // this.getPatientRegisterAbs(newVal)
  893. // }
  894. // },
  895. //按钮更新支付方式
  896. "payTypeFlag"(newVal, oldVal) {
  897. if (newVal != oldVal && newVal != '') {
  898. this.patientRegister.patientRegisterAbs.forEach(e =>{
  899. e.payTypeFlag = newVal;
  900. return e;
  901. });
  902. this.onSubmit('调整支付方式');
  903. }
  904. },
  905. },
  906. };
  907. </script>
  908. <style lang="scss" scoped>
  909. @import "../../assets/css/global.css";
  910. .mainareaBox {
  911. border: 1px solid #000;
  912. height: v-bind("(window.pageHeight > 720 ? (window.pageHeight - 460) : 260) + 'px'");
  913. margin-top: 5px;
  914. }
  915. .btnList {
  916. margin-top: 5px;
  917. margin-left: 5px;
  918. margin-right: 5px;
  919. }
  920. .disTotal {
  921. margin-left: 10px;
  922. }
  923. ::v-deep .el-input__inner {
  924. /*text-align: center;*/
  925. padding-left: 1px;
  926. padding-right: 1px;
  927. /*background-color: rgb(255, 0, 255);*/
  928. }
  929. ::v-deep .el-table th.el-table__cell {
  930. /*text-align: center;*/
  931. padding-left: 2px;
  932. padding-right: 2px;
  933. }
  934. ::v-deep .el-table td.el-table__cell {
  935. padding-left: 2px;
  936. padding-right: 2px;
  937. }
  938. ::v-deep .el-table .cell {
  939. padding-left: 2px;
  940. padding-right: 2px;
  941. }
  942. ::v-deep input[type="number"]::-webkit-inner-spin-button,
  943. input[type="number"]::-webkit-outer-spin-button {
  944. -webkit-appearance: none !important;
  945. margin: 0 !important;
  946. }
  947. </style>