TableModal.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <el-dialog title="推荐零件" width="800" v-model="open">
  3. <el-input
  4. class="mb-12px"
  5. v-model="part_name"
  6. placeholder="输入零件名模糊匹配"
  7. >
  8. <template #append>
  9. <el-button :icon="Search" @click="getData" />
  10. </template>
  11. </el-input>
  12. <el-table
  13. header-row-class-name="cus-table-header"
  14. :loading="loading"
  15. :data="dataSource"
  16. :max-height="400"
  17. @current-change="handleSelect"
  18. highlight-current-row
  19. >
  20. <el-table-column
  21. prop="part_type"
  22. label="自制/外购/支给(M/P/C)"
  23. width="200"
  24. />
  25. <el-table-column prop="part_attribute" label="零件属性" width="180" />
  26. <el-table-column prop="product_category" label="产品类别" width="180" />
  27. <el-table-column prop="manufacture_report" label="制造单元" width="180" />
  28. <el-table-column prop="manufacture_area" label="制造区域" width="180" />
  29. <el-table-column prop="erp_code" label="NK零件号" width="180" />
  30. <el-table-column prop="part_name" label="NK零件名称" width="180" />
  31. <el-table-column prop="process" label="制造工艺" width="180" />
  32. <el-table-column prop="material_grade" label="材料牌号" width="180" />
  33. <el-table-column prop="unit" label="计量单位" width="180" />
  34. </el-table>
  35. <template #footer>
  36. <div class="flex justify-between">
  37. <div>
  38. <span class="text-green text-12px"
  39. >当前选择(点击行选择):{{ currentRow?.erp_code }}</span
  40. >
  41. </div>
  42. <div class="dialog-footer">
  43. <el-button @click="open = false">取消</el-button>
  44. <el-button type="primary" :disabled="!currentRow" @click="handleOk">
  45. 确定
  46. </el-button>
  47. </div>
  48. </div>
  49. </template>
  50. </el-dialog>
  51. </template>
  52. <script setup lang="ts">
  53. import { Search } from "@element-plus/icons-vue";
  54. import { ref, defineExpose, defineEmits } from "vue";
  55. export interface IRecomend {
  56. process: string;
  57. part_attribute: string;
  58. product_category: string;
  59. manufacture_report: number;
  60. manufacture_area: number;
  61. part_type: string;
  62. erp_code: string;
  63. part_name: string;
  64. material_grade: number;
  65. id: string;
  66. unit: string;
  67. }
  68. // const options = [
  69. // { label: "自制", value: "M" },
  70. // { label: "外购", value: "P" },
  71. // { label: "支给", value: "C" },
  72. // ];
  73. const emit = defineEmits(["ok"]);
  74. const open = ref(false);
  75. const part_name = ref("");
  76. const part_type = ref("");
  77. const dataSource = ref([]);
  78. const loading = ref(false);
  79. const currentRow = ref<IRecomend>();
  80. const getData = () => {
  81. if (window.parent?.BpmTools?.program) {
  82. loading.value = true;
  83. }
  84. // 测试接口
  85. // fetch(`https://sl-yf-bommgr-admin-dev.shalu.com/api/module/Invoke`, {
  86. // method: 'POST',
  87. // headers: {
  88. // Authorization: 'bpm_client_1425496253931720704',
  89. // 'content-type': 'application/json;charset=UTF-8',
  90. // },
  91. // body: JSON.stringify({
  92. // interfaceCode: 'Common.getPartRecomendList',
  93. // part_name: part_name.value,
  94. // }),
  95. // })
  96. // .then((res) => res.json())
  97. // .then((res) => {
  98. // console.log('res', res);
  99. // dataSource.value = res?.result || [];
  100. // });
  101. window.parent?.BpmTools?.program(
  102. {
  103. interfaceCode: "Common.getPartRecomendList",
  104. part_name: part_name.value,
  105. part_type: part_type.value,
  106. },
  107. (res: any) => {
  108. dataSource.value = res || [];
  109. loading.value = false;
  110. }
  111. );
  112. };
  113. const handleOk = () => {
  114. emit("ok", currentRow.value);
  115. open.value = false;
  116. currentRow.value = undefined;
  117. };
  118. const handleSelect = (val: IRecomend) => {
  119. currentRow.value = val;
  120. };
  121. defineExpose({
  122. open: (partName: string = "", partType = "") => {
  123. open.value = true;
  124. part_name.value = partName;
  125. part_type.value = partType;
  126. console.log('partName', partName, partType);
  127. getData();
  128. },
  129. });
  130. </script>
  131. <style lang="less">
  132. .cus-table-header {
  133. color: #666;
  134. .el-table__cell {
  135. background-color: #f5f5f5 !important;
  136. }
  137. }
  138. </style>