detail.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <LjDetail
  3. name="mtrldefListDetail"
  4. ref="LjDetailRef"
  5. v-bind="detailProps"
  6. v-model:order-status="orderStatus"
  7. :data="mainData"
  8. :init-param="mainData[0]"
  9. :if-fold-layout="false"
  10. :if-layout-editable="false"
  11. :if-basic-editable="false"
  12. :search-col="{ xs: 4, sm: 4, md: 4, lg: 4, xl: 4 }"
  13. :basic-group-col="{ xs: 4, sm: 4, md: 4, lg: 4, xl: 4 }"
  14. :enum="props.enum"
  15. >
  16. <template #mxList>
  17. <LjVxeTable
  18. ref="VxeTableMxRef"
  19. row-key="pricelistid"
  20. table-cls=""
  21. :request-api="getMxData"
  22. :data-callback="dataCallback"
  23. :init-param="initParams"
  24. :columns="columns_mx"
  25. :dwname="dwname_mx"
  26. :table-props="tableProps"
  27. :auto-load-layout="false"
  28. :collapse-buttons="true"
  29. :table-button="[]"
  30. >
  31. </LjVxeTable>
  32. </template>
  33. </LjDetail>
  34. <ErpMtrldefDialog ref="MtrldefDialogRef" v-bind="MtrldefDialogProps" />
  35. </template>
  36. <script setup lang="tsx" name="mtrldefListDetail">
  37. import { ref, watch, reactive, inject, onMounted } from "vue";
  38. import { DwnameEnum } from "@/enums/dwnameEnum";
  39. import { getMtrlPriceList, getMtrlPriceNewList } from "@/api/modules/basicinfo";
  40. import LjDetail from "@/components/LjDetail/index.vue";
  41. import { DetailProp } from "@/components/LjDetail/interface";
  42. import { useI18n } from "vue-i18n";
  43. import { useHooks } from "./hooks/index";
  44. import { useAuthButtons } from "@/hooks/useAuthButtons";
  45. import ErpMtrldefDialog from "@/views/system/selector/erpMtrlPrice/index.vue";
  46. interface detailProp {
  47. /**
  48. * @argument any 页面数据
  49. */
  50. data?: any;
  51. /**
  52. * @argument string 请求数据的api ==> 非必传
  53. */
  54. requestApi?: (params: any) => Promise<any>;
  55. /**
  56. * @argument any 基础信息,表格展示数据
  57. */
  58. // columns?: any;
  59. /**
  60. * @description 是否可编辑
  61. */
  62. status: "edit" | "new" | string;
  63. enum?: any;
  64. }
  65. const props = withDefaults(defineProps<detailProp>(), {});
  66. const { t } = useI18n();
  67. const { LjDetailRef, VxeTableMxRef, columns, columns_mx, MtrldefDialogRef, MtrldefDialogProps } = useHooks(t);
  68. const { CheckPower, CheckOption, buttonNew, buttonDefault } = useAuthButtons(t);
  69. const mainData = ref([{}]);
  70. const initParams = ref({ mtrlid: 0 as Number });
  71. /**
  72. * @description 是否可编辑
  73. */
  74. const orderStatus = ref("");
  75. const dwname_mx = "web_mtrl_price_pricelist";
  76. const tableProps = {
  77. height: "",
  78. editConfig: { trigger: "click", mode: "cell" }
  79. // rowClassName: rowClsNameFunc
  80. // exportConfig: {
  81. // filename: t("menu.saletaskmx") + formatToDate(new Date(), "YYYY-MM-DD HH:mm:ss")
  82. // }
  83. };
  84. const detailProps = reactive<DetailProp>({
  85. dwname: DwnameEnum.mtrldeflist,
  86. columns: columns,
  87. // addPower: 5,
  88. // editPower: 4359,
  89. header: {
  90. fieldNames: {
  91. code: "deptname",
  92. codeLabel: t("table.u_cust.cuscode") + ":",
  93. name: "name"
  94. },
  95. icon: "iconuser-01",
  96. tabsProp: {
  97. scrollspy: false,
  98. sticky: true
  99. }
  100. },
  101. mould: [
  102. {
  103. id: "mxList",
  104. type: "table",
  105. label: "变量明细定义",
  106. isHidden: false
  107. }
  108. ]
  109. });
  110. const getMxData = (params: any) => {
  111. if (orderStatus.value === "new") {
  112. return getMtrlPriceNewList(params);
  113. }
  114. return getMtrlPriceList(params);
  115. };
  116. const dataCallback = (data: any) => {
  117. return {
  118. list: data.datatable,
  119. tableinfo: data.tableinfo,
  120. total: data.totalcnt,
  121. pageNum: data.pageindex,
  122. pageSize: data.pagesize
  123. };
  124. };
  125. watch(
  126. () => props.data,
  127. val => {
  128. console.log("props.data, val :>> ", val);
  129. mainData.value = [val];
  130. initParams.value.mtrlid = val.mtrlid;
  131. // getDetailData(val).then(res => {
  132. // detailData.value = res;
  133. // });
  134. },
  135. { immediate: true }
  136. );
  137. watch(
  138. () => props.status,
  139. val => {
  140. console.log("props.status val :>> ", val);
  141. orderStatus.value = val;
  142. },
  143. { immediate: true, deep: true }
  144. );
  145. </script>