index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. <template>
  2. <LjFoldLayout ref="LjFoldLayoutRef" v-bind="layoutSetting">
  3. <div class="main-box flx-col">
  4. <LjVxeTable
  5. ref="vxeTableRef"
  6. row-key="bednetid"
  7. :columns="columns"
  8. :init-param="initParams"
  9. :request-api="getData"
  10. :data-callback="dataCallback"
  11. :dwname="DwnameEnum.bednetQuote"
  12. :table-props="tableProps"
  13. :table-events="tableEvents"
  14. :auto-load-layout="false"
  15. :search-btn-size-extent="[]"
  16. pagination
  17. autoSelectFirstAfterRefresh
  18. @first-mounted="autoMonthedData"
  19. >
  20. <!-- 表格 header 按钮 -->
  21. <template #tableHeader>
  22. <LjHeaderMenu :update="dialogVisible" :action="action" />
  23. <!-- <el-button-group>
  24. <el-button @click="toAdd">{{ $t("common.add") }}</el-button>
  25. <el-button @click="toDel">{{ $t("common.delText") }}</el-button>
  26. <el-button @click="toA">{{ $t("common.auditFinance") }}</el-button>
  27. <el-button @click="toAdd">{{ $t("common.copyQuote") }}</el-button>
  28. <el-button @click="toAdd">{{ $t("common.businessOrder") }}</el-button>
  29. <el-button @click="toAdd">{{ $t("common.viewHistoricalQuotes") }}</el-button>
  30. </el-button-group> -->
  31. </template>
  32. </LjVxeTable>
  33. </div>
  34. <template #right>
  35. <div class="main-box flx card">
  36. <LjVxeTable
  37. ref="vxeTableMxRef"
  38. row-key="bednetmxid"
  39. table-cls="overflow-hidden flx-3 pr-16"
  40. :columns="columnsMx"
  41. :init-param="initParamsMx"
  42. :request-api="getDataMx"
  43. :data-callback="dataCallback"
  44. :dwname="DwnameEnum.bednetQuoteMx"
  45. :table-props="tableProps"
  46. :table-events="tableEventsMx"
  47. :auto-load-layout="false"
  48. :search-btn-size-extent="[]"
  49. autoSelectFirstAfterRefresh
  50. :request-auto="false"
  51. >
  52. <template #tableHeader>
  53. <LjHeader class="flx-1" title="床网多网明细" />
  54. </template>
  55. </LjVxeTable>
  56. <div class="flx-1 overflow-hidden h-full" style="min-width: 542px">
  57. <LjVxeTable
  58. ref="vxeTableMxSpringRef"
  59. row-key="bednetmx_partid"
  60. table-cls="overflow-hidden h-full"
  61. :columns="columnsMxSpring"
  62. :init-param="initParamsMxSpring"
  63. :request-api="getDataMxSpring"
  64. :data-callback="dataCallback"
  65. :dwname="DwnameEnum.bednetQuoteMxSpring"
  66. :table-props="tableProps"
  67. :auto-load-layout="false"
  68. :search-btn-size-extent="[]"
  69. :request-auto="false"
  70. >
  71. <template #tableHeader>
  72. <LjHeader class="flx-1" title="多区袋装明细" />
  73. </template>
  74. </LjVxeTable>
  75. </div>
  76. </div>
  77. </template>
  78. </LjFoldLayout>
  79. </template>
  80. <script setup lang="ts" name="bednetQuote">
  81. import { ref, onMounted, inject } from "vue";
  82. import { useRouter } from "vue-router";
  83. import { AuditBedNet, DeleteBedNet, ReCalculateBedNetNoAudit } from "@/api/modules/quote";
  84. import { CommonDynamicSelect } from "@/api/modules/common";
  85. import { ColumnProps } from "@/components/LjVxeTable/interface";
  86. import LjDrawer from "@/components/LjDrawer/index.vue";
  87. // import PriceListDetail from "./detail.vue";
  88. import { useHooks } from "./hooks/index";
  89. import LjDialog from "@/components/LjDialog/index.vue";
  90. import LjHeaderMenu from "@/components/LjHeaderMenu/index.vue";
  91. import { useI18n } from "vue-i18n";
  92. import { useAuthButtons } from "@/hooks/useAuthButtons";
  93. import { DwnameEnum } from "@/enums/dwnameEnum";
  94. import { formatToDateTime, formatToDate } from "@/utils/dateUtil";
  95. import { cloneDeep } from "lodash-es";
  96. import { useGlobalStore } from "@/stores/modules/global";
  97. import { ElMessage, ElMessageBox } from "element-plus";
  98. import { detailAction } from "@/components/LjDetail/interface";
  99. import mittBus from "@/utils/mittBus";
  100. import { MittEnum } from "@/enums/mittEnum";
  101. import { getCurrentRecords } from "@/utils/index";
  102. import LjFoldLayout from "@/components/LjFoldLayout/index.vue";
  103. import { usePageRouter } from "@/hooks/usePageRouter";
  104. const { t } = useI18n();
  105. const router = useRouter();
  106. const globalStore = useGlobalStore();
  107. const {
  108. vxeTableRef,
  109. columns,
  110. columnsMx,
  111. columnsMxSpring,
  112. initParams,
  113. initParamsMx,
  114. initParamsMxSpring,
  115. getData,
  116. getDataMx,
  117. getDataMxSpring,
  118. dataCallback
  119. } = useHooks();
  120. const { CheckPower, CheckOption, buttonNew, buttonDefault } = useAuthButtons(t);
  121. const { pageLockRefresh, pageLockOpen } = usePageRouter();
  122. const dialogVisible = ref(false);
  123. // const vxeTableRef = ref();
  124. const vxeTableMxRef = ref();
  125. const vxeTableMxSpringRef = ref();
  126. const LjFoldLayoutRef = ref();
  127. const layoutSetting = {
  128. dwname: DwnameEnum.bednetQuote,
  129. direction: "vertical",
  130. right: {
  131. // hidden: true
  132. }
  133. };
  134. const handleDBlClickTable = ({ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, $event }: any) => {
  135. if (globalStore.detailBlank) {
  136. // 打开新的窗口
  137. const routeUrl = router.resolve({
  138. path: `/bednetQuote/detail`,
  139. query: {
  140. id: row.bednetid,
  141. code: row.bednetcode
  142. }
  143. });
  144. window.open(routeUrl.href, "_blank");
  145. } else {
  146. // if (currentLayout.value.right.hidden && globalStore.mxFloat?.includes("custCrmDetail")) {
  147. // // 弹窗
  148. // mainData.value = row;
  149. // LjDrawerRef.value.show();
  150. // } else {
  151. // 打开新的标签页
  152. router.push(`/bednetQuote/detail?id=${row.bednetid}&code=${row.bednetcode}`);
  153. // }
  154. }
  155. };
  156. const handleClickTable = ({ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, $event }: any) => {
  157. initParamsMx.value.arg_bednetid = row.bednetid;
  158. };
  159. const rowClsNameFunc = (data: any) => {
  160. const { row, rowIndex, $rowIndex } = data;
  161. if (row.flag == "0") {
  162. return "vxecol-danger";
  163. }
  164. return "";
  165. };
  166. const tableProps = {
  167. height: "auto",
  168. editConfig: { trigger: "click", mode: "cell" },
  169. rowClassName: rowClsNameFunc
  170. // exportConfig: {
  171. // filename: t("menu.saletaskmx") + formatToDate(new Date(), "YYYY-MM-DD HH:mm:ss")
  172. // }
  173. };
  174. const autoMonthedData = (data: any) => {
  175. const $table = vxeTableRef.value.element;
  176. console.log("autoMonthedData 123:>> ", $table);
  177. if ($table) {
  178. let { fullData } = $table.getTableData();
  179. console.log("object :>> ", $table.getTableData());
  180. if (fullData.length > 0) {
  181. $table.setCurrentRow(fullData[0]);
  182. initParamsMx.value.arg_bednetid = fullData[0].bednetid;
  183. }
  184. }
  185. };
  186. const handleClickTableMx = ({ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, $event }: any) => {
  187. initParamsMxSpring.value.arg_bednetmxid = row.bednetmxid;
  188. };
  189. // 返回绑定的事件
  190. const tableEvents = {
  191. "cell-dblclick": handleDBlClickTable,
  192. "current-change": handleClickTable
  193. };
  194. // 返回绑定的事件
  195. const tableEventsMx = {
  196. "current-change": handleClickTableMx
  197. };
  198. /**
  199. * @description 按钮展示
  200. */
  201. const action: detailAction[] = [
  202. buttonDefault({
  203. label: t("common.redo"),
  204. clickFunc: item => {
  205. vxeTableRef.value.refresh();
  206. }
  207. }),
  208. buttonDefault({
  209. label: t("common.add"),
  210. power: 62,
  211. clickFunc: item => {
  212. console.log("inewss nitParams.value :>> ", vxeTableRef.value.searchParam);
  213. let _deptid = 0;
  214. if (Object.keys(vxeTableRef.value.searchParam).includes("arg_deptid")) {
  215. _deptid = vxeTableRef.value.searchParam.arg_deptid;
  216. }
  217. if (_deptid == 0) {
  218. let enumMap = vxeTableRef.value.enumMap;
  219. let enumdata = enumMap.get("deptid");
  220. if (enumdata && enumdata.length > 0) {
  221. _deptid = enumdata[0].value;
  222. }
  223. }
  224. router.push(`/bednetQuote/new?id=0&deptid=${_deptid}`);
  225. }
  226. }),
  227. buttonDefault({
  228. label: t("common.editText"),
  229. power: 62,
  230. clickFunc: item => {
  231. const { $table, curRecords } = getCurrentRecords(vxeTableRef.value);
  232. if (!curRecords.length) {
  233. ElMessage.warning(t("business.tips.mattress.records"));
  234. return;
  235. }
  236. // const _cur = $table.getCurrentRecord() ?? null;
  237. // console.log("_cur!!! :>> ", _cur);
  238. // if (_cur) {
  239. // router.push(`/bednetQuote/edit?id=${_cur.bednetid}&code=${_cur.bednetcode}`);
  240. // } else {
  241. const _cur = curRecords[curRecords.length - 1];
  242. if (_cur.flag == 1) {
  243. ElMessage.warning("单据已审核,不能修改");
  244. return;
  245. }
  246. pageLockOpen(
  247. `/bednetQuote/edit?id=${_cur.bednetid}&code=${_cur.bednetcode}`,
  248. "BedNetQuote",
  249. _cur.bednetid,
  250. _cur.bednetcode
  251. );
  252. // router.push(`/bednetQuote/edit?id=${_cur.bednetid}&code=${_cur.bednetcode}`);
  253. // }
  254. }
  255. }),
  256. buttonDefault({
  257. label: t("common.delText"),
  258. power: 76,
  259. disabledTextCallBack: (data: any) => {
  260. if (!CheckPower(76)) {
  261. return "你没有【报价单-删除】的使用权限";
  262. }
  263. return "";
  264. },
  265. clickFunc: item => {
  266. const { curRecords } = getCurrentRecords(vxeTableRef.value);
  267. console.log("curRecords :>> ", curRecords);
  268. if (!curRecords.length) {
  269. ElMessage.warning(t("business.tips.mattress.records"));
  270. return;
  271. }
  272. ElMessageBox.confirm(`是否确定要删除${curRecords.length}张报价单吗?`, "询问", {
  273. confirmButtonText: t("common.delText"),
  274. cancelButtonText: "否",
  275. type: "warning"
  276. })
  277. .then(() => {
  278. let list = curRecords.map((item: any) => {
  279. return { bednetid: Number(item.bednetid) };
  280. });
  281. DeleteBedNet({ list }).then(() => {
  282. ElMessage.success("删除成功!");
  283. vxeTableRef.value.refresh();
  284. });
  285. })
  286. .catch((e: TypeError) => {
  287. console.log("e :>> ", e);
  288. ElMessage({
  289. type: "info",
  290. message: "操作取消"
  291. });
  292. });
  293. }
  294. }),
  295. [
  296. buttonDefault({
  297. label: t("common.auditText"),
  298. power: 63,
  299. disabledTextCallBack: (data: any) => {
  300. if (!CheckPower(63)) {
  301. return `你没有【报价单-${t("common.auditText")}】的使用权限`;
  302. }
  303. return "";
  304. },
  305. clickFunc: item => {
  306. const { curRecords } = getCurrentRecords(vxeTableRef.value);
  307. ElMessageBox.confirm("是否确定要审核单据吗?", "询问", {
  308. confirmButtonText: "是",
  309. cancelButtonText: "否",
  310. type: "warning"
  311. })
  312. .then(() => {
  313. let list = curRecords.map((item: any) => {
  314. return { bednetid: Number(item.bednetid) };
  315. });
  316. AuditBedNet({ list, type: 1 }).then(() => {
  317. ElMessage.success("审核成功!");
  318. vxeTableRef.value.refresh();
  319. });
  320. })
  321. .catch((e: TypeError) => {
  322. ElMessage({
  323. type: "info",
  324. message: "操作取消"
  325. });
  326. });
  327. }
  328. }),
  329. buttonDefault({
  330. label: t("common.withdrawAuditText"),
  331. power: 64,
  332. disabledTextCallBack: (data: any) => {
  333. if (!CheckPower(64)) {
  334. return `你没有【报价单-${t("common.withdrawAuditText")}】的使用权限`;
  335. }
  336. return "";
  337. },
  338. clickFunc: item => {
  339. const { curRecords } = getCurrentRecords(vxeTableRef.value);
  340. ElMessageBox.confirm("是否确定要撤审单据吗?", "询问", {
  341. confirmButtonText: "是",
  342. cancelButtonText: "否",
  343. type: "warning"
  344. })
  345. .then(() => {
  346. let list = curRecords.map((item: any) => {
  347. return { bednetid: Number(item.bednetid) };
  348. });
  349. AuditBedNet({ list, type: 0 }).then(() => {
  350. ElMessage.success("撤审成功!");
  351. vxeTableRef.value.refresh();
  352. });
  353. })
  354. .catch((e: TypeError) => {
  355. ElMessage({
  356. type: "info",
  357. message: "操作取消"
  358. });
  359. });
  360. }
  361. })
  362. ],
  363. buttonDefault({
  364. label: t("common.copyQuote"),
  365. power: 75,
  366. clickFunc: item => {
  367. const { $table, curRecords } = getCurrentRecords(vxeTableRef.value);
  368. if (!curRecords.length) {
  369. ElMessage.warning(t("business.tips.mattress.records"));
  370. return;
  371. }
  372. const _cur = $table.getCurrentRecord() ?? null;
  373. if (_cur) {
  374. router.push(`/bednetQuote/copy?id=${_cur.bednetid}&code=${_cur.bednetcode}`);
  375. } else {
  376. const _cur = curRecords[curRecords.length - 1];
  377. router.push(`/bednetQuote/copy?id=${_cur.bednetid}&code=${_cur.bednetcode}`);
  378. }
  379. }
  380. }),
  381. // [
  382. // buttonDefault({
  383. // label: t("common.businessOrder"),
  384. // power: 94,
  385. // clickFunc: item => {
  386. // toAuditing({ xd_flag: 1 }, t("common.businessOrder"));
  387. // }
  388. // }),
  389. // buttonDefault({
  390. // label: t("common.businessOrderCancel"),
  391. // power: 95,
  392. // clickFunc: item => {
  393. // toAuditing({ xd_flag: 0 }, t("common.businessOrder"));
  394. // }
  395. // })
  396. // ],
  397. // [
  398. // buttonDefault({
  399. // label: t("common.auditFinance"),
  400. // power: 73,
  401. // clickFunc: item => {
  402. // toAuditing({ flag: 1 }, t("common.auditFinance"));
  403. // }
  404. // }),
  405. // buttonDefault({
  406. // label: t("common.withdrawAuditFinance"),
  407. // power: 74,
  408. // clickFunc: item => {
  409. // toAuditing({ flag: 0 }, t("common.withdrawAuditFinance"));
  410. // }
  411. // })
  412. // ],
  413. buttonDefault({
  414. label: t("common.copyFromMulitFlag"),
  415. power: 61,
  416. clickFunc: item => {
  417. router.push(`/bednetQuote/new?id=0`);
  418. }
  419. }),
  420. buttonDefault({
  421. label: t("common.recalculateFromNotFlag"),
  422. power: 61,
  423. clickFunc: item => {
  424. const { curRecords } = getCurrentRecords(vxeTableRef.value);
  425. console.log("curRecords :>> ", curRecords);
  426. if (!curRecords.length) {
  427. ElMessage.warning(t("business.tips.mattress.records"));
  428. return;
  429. }
  430. let list = curRecords.map((item: any) => {
  431. return { mattressid: Number(item.mattressid) };
  432. });
  433. ElMessageBox.confirm(`是否确定要批重算${curRecords.length}张床垫报价单吗?`, "询问", {
  434. confirmButtonText: t("common.okText"),
  435. cancelButtonText: "否",
  436. type: "warning"
  437. })
  438. .then(() => {
  439. ReCalculateBedNetNoAudit({ list }).then(() => {
  440. ElMessage.success("批重算成功!");
  441. vxeTableRef.value.refresh();
  442. });
  443. })
  444. .catch((e: TypeError) => {
  445. console.log("e :>> ", e);
  446. ElMessage({
  447. type: "info",
  448. message: "操作取消"
  449. });
  450. });
  451. }
  452. }),
  453. buttonDefault({
  454. label: t("common.viewHistoricalQuotes"),
  455. power: 61,
  456. clickFunc: item => {
  457. router.push(`/bednetQuote/new?id=0`);
  458. }
  459. }),
  460. buttonDefault({
  461. label: t("common.showQuoteList"),
  462. power: 61,
  463. clickFunc: item => {
  464. router.push(`/bednetQuote/new?id=0`);
  465. }
  466. }),
  467. buttonDefault({
  468. label: t("common.dataTransmission"),
  469. power: 61,
  470. clickFunc: item => {
  471. router.push(`/bednetQuote/new?id=0`);
  472. }
  473. })
  474. ];
  475. </script>