test-data.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <div>
  3. <div class="flex-1" style="padding-left:20px">
  4. <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" :round="false" size="default"
  5. @change="tabTypeChange"/>
  6. <el-select v-model="testReportId" :loading="insertDataSelectoading" :placeholder="placeholderType"
  7. class="ml-2 w-80"
  8. clearable @change="testReportIdchange">
  9. <el-option v-for="item in testReportData" :key="item.pKeyId" :label="item['nodeName']"
  10. :value="item['pKeyId']"/>
  11. </el-select>
  12. </div>
  13. <div class="dialog-table-box">
  14. <div class="copy-node-many-table">
  15. <el-scrollbar v-loading="insertDataTableLoading">
  16. <el-table :data="insertDataTable" border stripe @selection-change="insertDataTableCheck">
  17. <el-table-column type="selection" width="55"/>
  18. <el-table-column label="字段名称" prop="key"/>
  19. <el-table-column label="数值" prop="value"/>
  20. </el-table>
  21. </el-scrollbar>
  22. </div>
  23. </div>
  24. </div>
  25. </template>
  26. <script setup>
  27. import {ref, watch, onMounted} from "vue";
  28. import {getArrValue, getObjValue, setPosInsert} from "js-fast-way"
  29. import dataApi from "~api/tentative/detect/test";
  30. const props = defineProps({
  31. projectId: [String, Number],
  32. contractId: [String, Number],
  33. tableId: [String, Number],
  34. treeId: [String, Number],
  35. })
  36. //参数变量
  37. const projectId = ref(props.projectId);
  38. const contractId = ref(props.contractId);
  39. const table_id = ref(props.tableId)
  40. const tree_id = ref(props.treeId)
  41. //监听
  42. watch(() => [
  43. props.projectId,
  44. props.contractId,
  45. props.tableId,
  46. props.treeId,
  47. ], ([pid, cid, tableId, treeId]) => {
  48. projectId.value = pid
  49. contractId.value = cid
  50. table_id.value = tableId
  51. tree_id.value = treeId
  52. })
  53. //渲染完成
  54. onMounted(() => {
  55. getSearchNodeTables()
  56. })
  57. //事件
  58. const emit = defineEmits(['change'])
  59. //类型tab数据和相关处理
  60. const tabTypeKey = ref('2')
  61. const tabTypeTab = ref([
  62. {key: '1', name: '试验记录表'},
  63. {key: '2', name: '试验报告单'},
  64. ]);
  65. const placeholderType = ref('试验报告单')
  66. const tabTypeChange = ({key}) => {
  67. tabTypeKey.value = key
  68. if (tabTypeKey.value === '1') {
  69. placeholderType.value = '试验记录表'
  70. } else {
  71. placeholderType.value = '试验报告单'
  72. }
  73. getSearchNodeTables()
  74. }
  75. const insertDataSelectoading = ref(false)
  76. const testReportData = ref([])
  77. const getSearchNodeTables = async () => {
  78. insertDataSelectoading.value = true
  79. const {error, code, data} = await dataApi.searchNodeTables({
  80. id: table_id.value,
  81. projectId: projectId.value,
  82. contractId: contractId.value,
  83. primaryKeyId: tree_id.value,
  84. // type: authBtnTabKey.value,
  85. tableType: tabTypeKey.value
  86. })
  87. //处理数据
  88. insertDataSelectoading.value = false
  89. if (!error && code === 200) {
  90. testReportData.value = getArrValue(data)
  91. if (testReportData.value.length > 0) {
  92. testReportId.value = testReportData.value[0].pKeyId
  93. getBussddataInfotrialData()
  94. }
  95. } else {
  96. testReportData.value = []
  97. }
  98. }
  99. const testReportId = ref('');
  100. const checPkd = ref('')
  101. const testReportIdchange = (key) => {
  102. testReportData.value.forEach((item) => {
  103. if (item.id == key) {
  104. checPkd.value = item.pKeyId
  105. }
  106. })
  107. getBussddataInfotrialData()
  108. }
  109. const insertDataTableLoading = ref(false)
  110. const insertDataTable = ref([])
  111. const multipleSelection = ref([])
  112. const insertDataTableCheck = (val) => {
  113. multipleSelection.value = val
  114. }
  115. //获取试验表中的data数据接口:
  116. const getBussddataInfotrialData = async () => {
  117. insertDataTableLoading.value = true;
  118. const {error, code, data} = await dataApi.getBussddataInfotrialList({
  119. // id:testReportId.value,
  120. id: table_id.value,
  121. pkeyId: testReportId.value,
  122. })
  123. insertDataTableLoading.value = false
  124. if (!error && code === 200) {
  125. let arrobj = getObjValue(data)
  126. let arr = []
  127. for (let key of Object.keys(arrobj)) {
  128. arr.push({
  129. key: key,
  130. value: arrobj[key]
  131. })
  132. }
  133. insertDataTable.value = arr
  134. } else {
  135. insertDataTable.value = []
  136. }
  137. }
  138. //确定关联试验数据数据
  139. const submitinsertData = ({KeyName, startPos, endPos, pkeyId}, itemForm) => {
  140. if (multipleSelection.value.length > 0) {
  141. const val = []
  142. multipleSelection.value.forEach((item) => {
  143. val.push(item['value'])
  144. })
  145. const newval = val.join('、')
  146. const formValue = setPosInsert(startPos, endPos, itemForm, newval)
  147. let posVal = startPos + newval.length;
  148. return {code: 200, val: formValue, posVal}
  149. } else {
  150. window?.$message?.warning('请选择你要关联的数据')
  151. return {code: 300, val: '', posVal: ''}
  152. }
  153. }
  154. // 暴露出去
  155. defineExpose({
  156. submitinsertData
  157. })
  158. </script>