bottomTable.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div>
  3. <avue-crud
  4. ref="crudRef"
  5. v-model:search="search"
  6. v-model="form"
  7. :data="data"
  8. :option="option"
  9. v-model:page="page"
  10. @row-save="createRow"
  11. @row-update="updateRow"
  12. @row-del="deleteRow"
  13. @selection-change="selectionChange"
  14. @sortable-change="onSortChange"
  15. @search-change="searchChange"
  16. @search-reset="resetChange"
  17. @size-change="dataList"
  18. @current-change="dataList"
  19. >
  20. <template #imgUrl-form="scope">
  21. <single-upload v-model="form.imgUrl" />
  22. </template>
  23. <template #imgUrl="{ row }">
  24. <el-button link type="primary" @click.stop="imgUrlClick(row)">{{
  25. row.imgUrl
  26. }}</el-button>
  27. </template>
  28. </avue-crud>
  29. <CommonTable
  30. ref="commonTableRef"
  31. :tableTitle="tableTitle"
  32. :tableType="commonTableType"
  33. @selected-sure="onSelectedFinish"
  34. />
  35. <el-dialog v-model="dialogVisible">
  36. <img w-full :src="previewImgUrl" alt="Preview Image" />
  37. </el-dialog>
  38. </div>
  39. </template>
  40. <script setup>
  41. import { ref, getCurrentInstance } from "vue";
  42. import { useCrud } from "@/hooks/userCrud";
  43. import { getTableConfig } from "./configs";
  44. import { saveCompoents } from "@/api/craft/process/index";
  45. import SingleUpload from "@/components/Upload/SingleUpload.vue";
  46. const props = defineProps({
  47. tableTitle: {
  48. default: "",
  49. type: String,
  50. },
  51. tableType: {
  52. default: "",
  53. type: String,
  54. },
  55. });
  56. const route = useRoute();
  57. const tableConfig = getTableConfig(route.params.id);
  58. // 传入一个url,后面不带/
  59. const { url, form, data, option, search, page, toDeleteIds, Methords, Utils } =
  60. useCrud({
  61. src: tableConfig[props.tableType].url,
  62. });
  63. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  64. Methords; //增删改查
  65. const { selectionChange, multipleUpdate } = Methords; //选中和批量删除事件
  66. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  67. const startCreat = () => {
  68. if (props.tableType === "wuliaocaiji") {
  69. //根据物料编码获取对应的物料BOM
  70. commonTableRef.value && commonTableRef.value.startSelect({ materialCode: "1202010000005" });
  71. } else {
  72. crudRef.value && crudRef.value.rowAdd();
  73. }
  74. };
  75. const saveSortData = async () => {
  76. multipleUpdate();
  77. };
  78. defineExpose({ startCreat, saveSortData });
  79. const onSortChange = () => {
  80. data.value.forEach((item) => {
  81. console.log(item.id);
  82. });
  83. };
  84. // ============公共弹窗table选择相关,物料采集等使用===============
  85. const commonTableRef = ref({});
  86. const commonTableType = ref("MARTERIAL_BOM");
  87. const onSelectedFinish = (itemValue) => {
  88. crudRef.value && crudRef.value.rowAdd();
  89. if (props.tableType === "wuliaocaiji") {
  90. form.value.itemName = itemValue.bomMaterialName;
  91. form.value.itemCode = itemValue.bomMaterialCode;
  92. form.value.itemModel = itemValue.bomMaterialAttribute;
  93. form.value.num = itemValue.bomMaterialNumber;
  94. form.value.traceType = "S";
  95. form.value.unit = itemValue.unitDictValue;
  96. }
  97. };
  98. const previewImgUrl = ref("");
  99. const dialogVisible = ref(false);
  100. const imgUrlClick = (itemValue) => {
  101. previewImgUrl.value = itemValue.imgUrl;
  102. dialogVisible.value = true;
  103. };
  104. onMounted(() => {
  105. search.value.operationId = route.params.id;
  106. url.value = tableConfig[props.tableType].url;
  107. option.value = Object.assign(option.value, {
  108. addBtn: false,
  109. searchShow: false,
  110. header: false,
  111. sortable: true,
  112. column: tableConfig[props.tableType].column,
  113. });
  114. dataList();
  115. });
  116. watch(
  117. () => props.tableType,
  118. () => {
  119. console.log("faslegb");
  120. url.value = tableConfig[props.tableType].url;
  121. option.value = Object.assign(option.value, {
  122. addBtn: false,
  123. searchShow: false,
  124. header: false,
  125. sortable: true,
  126. column: tableConfig[props.tableType].column,
  127. });
  128. dataList();
  129. }
  130. );
  131. </script>