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.

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