bottomTable.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. commonTableRef.value && commonTableRef.value.startSelect({ hhhh: "ddddd" });
  70. } else {
  71. crudRef.value && crudRef.value.rowAdd();
  72. }
  73. };
  74. const saveSortData = async () => {
  75. multipleUpdate();
  76. };
  77. defineExpose({ startCreat, saveSortData });
  78. const onSortChange = () => {
  79. data.value.forEach((item) => {
  80. console.log(item.id);
  81. });
  82. };
  83. // ============公共弹窗table选择相关,物料采集等使用===============
  84. const commonTableRef = ref({});
  85. const commonTableType = ref("MARTERIAL_BOM");
  86. const onSelectedFinish = (itemValue) => {
  87. crudRef.value && crudRef.value.rowAdd();
  88. if (props.tableType === "wuliaocaiji") {
  89. form.value.itemName = itemValue.materialName;
  90. form.value.itemCode = itemValue.materialCode;
  91. form.value.itemModel = itemValue.spec;
  92. form.value.num = 1;
  93. form.value.traceType = "S";
  94. form.value.unit = itemValue.unitDictValue;
  95. }
  96. };
  97. const previewImgUrl = ref("");
  98. const dialogVisible = ref(false);
  99. const imgUrlClick = (itemValue) => {
  100. previewImgUrl.value = itemValue.imgUrl;
  101. dialogVisible.value = true;
  102. };
  103. onMounted(() => {
  104. search.value.operationId = route.params.id;
  105. url.value = tableConfig[props.tableType].url;
  106. option.value = Object.assign(option.value, {
  107. addBtn: false,
  108. searchShow: false,
  109. header: false,
  110. sortable: true,
  111. column: tableConfig[props.tableType].column,
  112. });
  113. dataList();
  114. });
  115. watch(
  116. () => props.tableType,
  117. () => {
  118. console.log("faslegb");
  119. url.value = tableConfig[props.tableType].url;
  120. option.value = Object.assign(option.value, {
  121. addBtn: false,
  122. searchShow: false,
  123. header: false,
  124. sortable: true,
  125. column: tableConfig[props.tableType].column,
  126. });
  127. dataList();
  128. }
  129. );
  130. </script>