expendMxDetail.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. <template>
  2. <div id="editExpendMx">
  3. <el-card style="position: relative">
  4. <span>基本信息</span>
  5. <el-form
  6. :model="basicForm"
  7. :rules="basicRules"
  8. ref="basic"
  9. label-width="auto"
  10. :show-message="false"
  11. >
  12. <el-row :gutter="10">
  13. <el-col :span="1.5">
  14. <el-form-item label="编码" prop="code">
  15. <el-input
  16. style="width: 200px"
  17. clearable
  18. disabled
  19. :size="size"
  20. v-model="basicForm.code"
  21. >
  22. </el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="1.5">
  26. <el-form-item label="服务费合计" prop="serviceFee">
  27. <el-input-number
  28. style="width: 200px"
  29. clearable
  30. disabled
  31. v-model="publishedBooksMessage"
  32. :size="size"
  33. :precision="2"
  34. >
  35. <!-- <el-input style="width: 200px" clearable disabled :size="size" v-model="basicForm.serviceFee"> -->
  36. </el-input-number>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="1.5">
  40. <el-form-item label="医院编码" prop="custCode">
  41. <el-input
  42. style="width: 200px"
  43. clearable
  44. :disabled="sonDisable"
  45. :size="size"
  46. v-model="basicForm.custCode"
  47. >
  48. </el-input>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="1.5">
  52. <el-form-item label="医院名称" prop="custName">
  53. <el-input
  54. style="width: 200px"
  55. clearable
  56. :disabled="sonDisable"
  57. :size="size"
  58. v-model="basicForm.custName"
  59. >
  60. </el-input>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="1.5">
  64. <el-form-item label="供应商编码" prop="supplierCode">
  65. <el-input
  66. style="width: 200px"
  67. clearable
  68. :disabled="sonDisable"
  69. :size="size"
  70. v-model="basicForm.supplierCode"
  71. >
  72. </el-input>
  73. </el-form-item>
  74. </el-col>
  75. <el-col :span="1.5">
  76. <el-form-item label="供应商名称" prop="supplierName">
  77. <el-input
  78. style="width: 200px"
  79. clearable
  80. :disabled="sonDisable"
  81. :size="size"
  82. v-model="basicForm.supplierName"
  83. >
  84. </el-input>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="1.5">
  88. <el-form-item label="结算单号" prop="settleNo">
  89. <el-input
  90. style="width: 200px"
  91. clearable
  92. :disabled="sonDisable"
  93. :size="size"
  94. v-model="basicForm.settleNo"
  95. >
  96. </el-input>
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="1.5">
  100. <el-form-item label="结算开始日期" prop="startDate">
  101. <el-date-picker
  102. v-model="basicForm.startDate"
  103. :disabled="sonDisable"
  104. clearable
  105. type="date"
  106. value-format="yyyy-MM-dd"
  107. :size="size"
  108. style="width: 200px"
  109. >
  110. </el-date-picker>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="1.5">
  114. <el-form-item label="结算截止日期" prop="endDate">
  115. <el-date-picker
  116. v-model="basicForm.endDate"
  117. :disabled="sonDisable"
  118. clearable
  119. type="date"
  120. value-format="yyyy-MM-dd"
  121. :size="size"
  122. style="width: 200px"
  123. >
  124. </el-date-picker>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="1.5">
  128. <el-form-item label="合计金额" prop="totalAmount">
  129. <el-input-number
  130. style="width: 200px"
  131. clearable
  132. disabled
  133. v-model="publishedBooksMessage2"
  134. :size="size"
  135. :precision="2"
  136. >
  137. </el-input-number>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="1.5">
  141. <el-form-item label="是否汇总" prop="isSum">
  142. <el-select
  143. style="width: 200px"
  144. :size="size"
  145. :disabled="true"
  146. clearable
  147. v-model="basicForm.isSum"
  148. placeholder="请选择"
  149. >
  150. <el-option
  151. v-for="item in options"
  152. :key="item.value"
  153. :label="item.label"
  154. :value="item.value"
  155. >
  156. </el-option>
  157. </el-select>
  158. </el-form-item>
  159. </el-col>
  160. <el-col :span="1.5">
  161. <el-form-item label="汇总单据号" prop="sumCode">
  162. <el-input
  163. style="width: 200px"
  164. disabled
  165. :size="size"
  166. v-model="basicForm.sumCode"
  167. >
  168. </el-input>
  169. </el-form-item>
  170. </el-col>
  171. <el-col :span="1.5">
  172. <el-form-item label="是否带量" prop="isWhether">
  173. <el-select
  174. style="width: 200px"
  175. :size="size"
  176. :disabled="sonDisable"
  177. clearable
  178. v-model="basicForm.isWhether"
  179. placeholder="请选择"
  180. >
  181. <el-option
  182. v-for="item in options1"
  183. :key="item.value"
  184. :label="item.label"
  185. :value="item.value"
  186. >
  187. </el-option>
  188. </el-select>
  189. </el-form-item>
  190. </el-col>
  191. <el-col :span="1.5">
  192. <el-form-item label="备注" prop="remark">
  193. <el-input
  194. style="width: 200px"
  195. clearable
  196. :disabled="sonDisable"
  197. :size="size"
  198. v-model="basicForm.remark"
  199. >
  200. </el-input>
  201. </el-form-item>
  202. </el-col>
  203. </el-row>
  204. </el-form>
  205. <div class="btn_group">
  206. <!-- <el-button type="primary" :size="size" @click="toOA" v-if="sonPageStu == 'check'">提交</el-button> -->
  207. <el-button
  208. type="primary"
  209. :size="size"
  210. @click="editPage"
  211. v-if="sonPageStu == 'check'"
  212. >编辑</el-button
  213. >
  214. <el-button
  215. type="primary"
  216. :size="size"
  217. @click="save"
  218. v-if="sonPageStu == 'add' || sonPageStu == 'edit'"
  219. >保存</el-button
  220. >
  221. <el-button :size="size" plain @click="back">返回</el-button>
  222. </div>
  223. <div class="btn_grooup">
  224. <span>明细信息</span>
  225. <div>
  226. <el-button
  227. type="primary"
  228. :size="size"
  229. @click="editLine"
  230. v-if="!sonDisable"
  231. >批量修改</el-button
  232. >
  233. <el-button
  234. v-if="sonPageStu == 'check'"
  235. :size="size"
  236. :disabled="!ids.length"
  237. @click="useDisassembly"
  238. >拆 单</el-button
  239. >
  240. <!-- <el-button type="primary" :size="size" @click="delLines" v-if="!sonDisable">删行</el-button> -->
  241. </div>
  242. </div>
  243. <el-dialog
  244. title="批量修改"
  245. @close="clearInfo"
  246. :visible.sync="dialogFormVisible"
  247. >
  248. <el-form :model="dialogForm" label-width="auto">
  249. <el-form-item label="明细信息">
  250. <el-select :size="size" v-model="dialogForm.region">
  251. <el-option label="服务费率" value="ratio"></el-option>
  252. <el-option label="单价" value="price"></el-option>
  253. </el-select>
  254. </el-form-item>
  255. <el-form-item label="修改值">
  256. <el-input-number
  257. clearable
  258. :size="size"
  259. :min="0"
  260. v-model="dialogForm.info"
  261. ></el-input-number>
  262. </el-form-item>
  263. </el-form>
  264. <div slot="footer" class="dialog-footer">
  265. <el-button :size="size" @click="dialogFormVisible = false"
  266. >取 消</el-button
  267. >
  268. <el-button :size="size" type="primary" @click="confirm"
  269. >确 定</el-button
  270. >
  271. </div>
  272. </el-dialog>
  273. <ux-grid
  274. :data="basicForm.itemList"
  275. border
  276. :cell-style="{ borderColor: '#c0c0c0' }"
  277. :header-cell-style="{ borderColor: '#c0c0c0' }"
  278. class="exporttable"
  279. height="410"
  280. max-height="410"
  281. style="font-size: 12px"
  282. @selection-change="handleSelectionChange"
  283. ref="table"
  284. show-header-overflow="tooltip"
  285. show-overflow="tooltip"
  286. keep-source
  287. beautifyTable
  288. :checkbox-config="{ highlight: true, trigger: 'row' }"
  289. :edit-config="{ trigger: 'click', mode: 'row' }"
  290. >
  291. >
  292. <ux-table-column resizable type="checkbox" width="50px" fixed="left" />
  293. <ux-table-column
  294. resizable
  295. title="医保编码"
  296. field="healthCode"
  297. align="center"
  298. />
  299. <ux-table-column
  300. resizable
  301. title="物料编码"
  302. field="itemCode"
  303. align="center"
  304. />
  305. <ux-table-column
  306. resizable
  307. title="物料名称"
  308. field="itemName"
  309. align="center"
  310. />
  311. <ux-table-column
  312. resizable
  313. title="规格型号"
  314. field="itemSpec"
  315. align="center"
  316. />
  317. <ux-table-column
  318. resizable
  319. title="厂家"
  320. field="manufactor"
  321. align="center"
  322. />
  323. <ux-table-column
  324. resizable
  325. title="单位"
  326. field="itemUom"
  327. align="center"
  328. />
  329. <ux-table-column
  330. resizable
  331. title="是否带量"
  332. field="isWhether"
  333. align="center"
  334. :formatter="hangStatus"
  335. />
  336. <ux-table-column
  337. resizable
  338. title="服务费率(%)"
  339. field="ratio"
  340. align="center"
  341. edit-render
  342. >
  343. <template v-slot:edit="scope">
  344. <el-input-number
  345. clearable
  346. :disabled="sonDisable"
  347. :min="0"
  348. :size="size"
  349. v-model="scope.row.ratio"
  350. @input="changeFei(scope.rowIndex, scope.row)"
  351. />
  352. </template>
  353. </ux-table-column>
  354. <ux-table-column resizable title="数量" field="qty" align="center" />
  355. <ux-table-column
  356. resizable
  357. title="单价"
  358. field="price"
  359. align="center"
  360. edit-render
  361. >
  362. <template v-slot:edit="scope">
  363. <el-input-number
  364. clearable
  365. :disabled="sonDisable"
  366. :min="0"
  367. :size="size"
  368. v-model="scope.row.price"
  369. @input="changeFei(scope.rowIndex, scope.row)"
  370. />
  371. </template>
  372. </ux-table-column>
  373. <ux-table-column resizable title="小计" field="amount" align="center" />
  374. <ux-table-column
  375. resizable
  376. title="备注"
  377. field="detailRemark"
  378. align="center"
  379. />
  380. <ux-table-column
  381. resizable
  382. title="服务费"
  383. field="serviceFee"
  384. align="center"
  385. />
  386. </ux-grid>
  387. </el-card>
  388. </div>
  389. </template>
  390. <script>
  391. import {
  392. Mxdetail,
  393. editSaveMx,
  394. toOAs,
  395. divideDoc,
  396. } from "@/api/expend/expendMx.js";
  397. export default {
  398. props: ["pageStu", "row", "disable"],
  399. model: {
  400. prop: "isList",
  401. event: "jugislist",
  402. },
  403. data() {
  404. return {
  405. size: "mini",
  406. // 不能直接改变props传来的值
  407. sonPageStu: this.pageStu,
  408. sonDisable: this.disable,
  409. basicForm: {
  410. id: "",
  411. code: "",
  412. serviceFee: 0,
  413. custCode: "",
  414. custName: "",
  415. supplierCode: "",
  416. supplierName: "",
  417. settleNo: "",
  418. startDate: "",
  419. endDate: "",
  420. totalAmount: "",
  421. isSum: "",
  422. sumCode: "",
  423. isWhether: "",
  424. remark: "",
  425. itemList: [],
  426. },
  427. options: [
  428. { value: "0", label: "是" },
  429. { value: "2", label: "否" },
  430. ],
  431. options1: [
  432. { value: "0", label: "否" },
  433. { value: "1", label: "是" },
  434. ],
  435. basicRules: {},
  436. ids: [],
  437. dialogFormVisible: false,
  438. dialogForm: {
  439. region: "ratio",
  440. info: "",
  441. },
  442. };
  443. },
  444. created() {
  445. if (this.pageStu == "check") {
  446. // console.log("数据", this.row);
  447. this.getDetails(this.row);
  448. } else if (this.pageStu == "edit") {
  449. this.getDetails(this.row);
  450. } else if (this.pageStu == "add") {
  451. }
  452. },
  453. computed: {
  454. // 一个计算属性的 getter
  455. publishedBooksMessage: {
  456. get() {
  457. this.basicForm.serviceFee = this.basicForm.itemList.reduce(
  458. (sum, item) => {
  459. return (sum += this.getToFixed(item.ratio * 0.01 * item.amount));
  460. },
  461. 0
  462. );
  463. return this.basicForm.serviceFee;
  464. },
  465. set() {},
  466. },
  467. publishedBooksMessage2: {
  468. get() {
  469. this.basicForm.totalAmount = this.basicForm.itemList.reduce(
  470. (sum, item) => {
  471. return (sum += this.getToFixed(item.qty * item.price));
  472. },
  473. 0
  474. );
  475. return this.basicForm.totalAmount;
  476. },
  477. set() {},
  478. },
  479. },
  480. methods: {
  481. getToFixed(prop, val = 2) {
  482. return Number(prop.toFixed(val));
  483. },
  484. getDetails(row) {
  485. Mxdetail(row.id).then((res) => {
  486. if (res.code === 200) {
  487. this.basicForm = res.data;
  488. }
  489. });
  490. },
  491. editPage() {
  492. this.sonPageStu = "edit";
  493. this.sonDisable = false;
  494. },
  495. save() {
  496. editSaveMx(this.basicForm).then((res) => {
  497. if (res.code === 200) {
  498. this.$modal.notifySuccess("编辑保存成功");
  499. this.sonPageStu = "check";
  500. this.sonDisable = true;
  501. this.getDetails(this.row);
  502. this.ids = [];
  503. }
  504. });
  505. },
  506. back() {
  507. this.$emit("jugislist", true);
  508. this.$emit("refresh");
  509. },
  510. handleSelectionChange(selection) {
  511. // this.ids = selection.map(item =>{
  512. // return item.id
  513. // })
  514. this.ids = selection;
  515. },
  516. editLine() {
  517. if (this.ids.length <= 0) {
  518. this.$modal.notifyWarning("请至少选择一条数据进行操作!");
  519. } else {
  520. this.dialogFormVisible = true;
  521. }
  522. },
  523. // 拆单
  524. async useDisassembly() {
  525. try {
  526. let ids = this.ids.map((item) => item.id);
  527. let tableLit = _.cloneDeep(this.basicForm.itemList);
  528. tableLit = tableLit.map((item) => {
  529. let index = ids.findIndex((i) => i === item.id);
  530. if (index !== -1) {
  531. item.isWhether = "1";
  532. }
  533. return item;
  534. });
  535. let { code, msg } = await divideDoc({
  536. ...this.basicForm,
  537. itemList: tableLit,
  538. });
  539. if (code === 200) {
  540. this.$notify.success(msg);
  541. this.back();
  542. }
  543. } catch (error) {}
  544. },
  545. confirm() {
  546. console.log("修改值", this.dialogForm);
  547. this.ids.forEach((item) => {
  548. item[this.dialogForm.region] = this.dialogForm.info;
  549. // 小计 = 数量 * 单价
  550. item.amount = item.qty * item.price;
  551. item.serviceFee = (item.ratio * 0.01 * item.amount).toFixed(2);
  552. });
  553. this.dialogFormVisible = false;
  554. },
  555. clearInfo() {
  556. this.dialogForm = {
  557. region: "ratio",
  558. info: "",
  559. };
  560. },
  561. delLines() {},
  562. toOA() {
  563. this.$modal.loading("正在提交,请稍后...");
  564. toOAs(this.basicForm)
  565. .then((res) => {
  566. if (res.code === 200) {
  567. this.$modal.closeLoading();
  568. this.$modal.notifySuccess(res.msg);
  569. this.back();
  570. }
  571. })
  572. .catch((err) => {
  573. this.$modal.closeLoading();
  574. });
  575. },
  576. changeFei(index, row) {
  577. row.amount = row.qty * row.price;
  578. row.serviceFee = (row.ratio * 0.01 * row.amount).toFixed(2);
  579. // this.basicForm.serviceFee = this.basicForm.itemList.map(item => {
  580. // return item.serviceFee += item.serviceFee
  581. // })
  582. },
  583. hangStatus(row) {
  584. switch (row.row.isWhether) {
  585. case "0":
  586. return "否";
  587. case "":
  588. return "否";
  589. case "1":
  590. return "是";
  591. }
  592. },
  593. },
  594. };
  595. </script>
  596. <style lang="scss" scoped>
  597. .btn_group {
  598. display: flex;
  599. justify-content: space-between;
  600. position: absolute;
  601. top: 10px;
  602. right: 20px;
  603. }
  604. .btn_grooup {
  605. margin-bottom: 10px;
  606. display: flex;
  607. justify-content: space-between;
  608. }
  609. </style>