testdata.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. <!-- -->
  2. <template>
  3. <div class="hc-layout-box">
  4. <HcNewCard>
  5. <template #header>
  6. <HcTooltip keys="gauge-testdata-add">
  7. <el-button hc-btn type="primary" @click="AddRowClick">
  8. <HcIcon name="add-box" />
  9. <span>新增</span>
  10. </el-button>
  11. </HcTooltip>
  12. <HcTooltip keys="gauge-testdata-import">
  13. <el-button hc-btn @click="importModalClick">
  14. <HcIcon name="upload-cloud" />
  15. <span>导入</span>
  16. </el-button>
  17. </HcTooltip>
  18. <div class="w-60 ml-6">
  19. <el-input v-model="searchForm.searchValue" clearable :placeholder="placeTitle" @keyup="keyUpEvent" />
  20. </div>
  21. <div class="ml-2">
  22. <el-button type="primary" @click="searchClick">
  23. <HcIcon name="search-2" />
  24. <span>搜索</span>
  25. </el-button>
  26. </div>
  27. </template>
  28. <template #extra>
  29. <HcNewSwitch :datas="tabsTypeData" :keys="tabsTypeKey" size="default" @change="tabsTypeChange" />
  30. </template>
  31. <HcTable v-if="tabsTypeKey === '0'" :column="tableColumn" :datas="tableData" :laoding="tableLoading" is-new :index-style="{ width: 60 }">
  32. <template #action="{ row }">
  33. <HcTooltip keys="gauge-station-edit">
  34. <el-button size="small" text type="primary" @click="handleLevelEdit(row)">编辑</el-button>
  35. </HcTooltip>
  36. <HcTooltip keys="gauge-station-del">
  37. <el-button size="small" text type="danger" @click="handleLevelDelete(row)">删除</el-button>
  38. </HcTooltip>
  39. </template>
  40. </HcTable>
  41. <HcTable v-if="tabsTypeKey === '1'" :column="matchTableColumn" :datas="matchData" :laoding="matchtableLoading" is-new :index-style="{ width: 60 }">
  42. <template #action="{ row }">
  43. <HcTooltip keys="gauge-testdata-edit">
  44. <el-button size="small" text type="primary" @click="handmatchEdit(row)">编辑</el-button>
  45. </HcTooltip>
  46. <HcTooltip keys="gauge-testdata-del">
  47. <el-button size="small" text type="danger" @click="handmathDelete(row)">删除</el-button>
  48. </HcTooltip>
  49. </template>
  50. </HcTable>
  51. <template #action>
  52. <HcPages :pages="searchForm" @change="pageChange" />
  53. </template>
  54. <!-- 新增/编辑 弹框 -->
  55. <hc-new-dialog
  56. v-model="testModal"
  57. :title="`${formRowValue?.id || matchformRowValue?.id ? '编辑' : '新增'}${tabsTypeKey === '0' ? '原材' : '配合比'}`"
  58. widths="47rem"
  59. :is-table="tabsTypeKey === '1'"
  60. @close="testModalClose"
  61. >
  62. <el-form v-if="tabsTypeKey === '0'" ref="formRowRef" :model="formRowValue" :rules="rulesRow" label-width="auto" size="large">
  63. <el-form-item label="材料名称" prop="name">
  64. <el-input v-model="formRowValue.name" placeholder="请输入材料名称" />
  65. </el-form-item>
  66. <el-form-item label="规格型号" prop="specification">
  67. <el-input v-model="formRowValue.specification" placeholder="请输入规格型号" />
  68. </el-form-item>
  69. <el-form-item label="生产厂商" prop="manufacturers">
  70. <el-input v-model="formRowValue.manufacturers" placeholder="请输入生产厂商" />
  71. </el-form-item>
  72. <el-form-item label="存放地点或料厂号" prop="storageSite">
  73. <el-input v-model="formRowValue.storageSite" placeholder="请输入存放地点或料厂号" />
  74. </el-form-item>
  75. <el-form-item label="试验批准文号" prop="batchNumber">
  76. <el-input v-model="formRowValue.batchNumber" placeholder="请输入试验批准文号" />
  77. </el-form-item>
  78. <el-form-item label="准备数量" prop="total">
  79. <el-input v-model="formRowValue.total" placeholder="请输入准备数量" />
  80. </el-form-item>
  81. </el-form>
  82. <el-form v-if="tabsTypeKey === '1'" ref="matchformRowRef" :model="matchformRowValue" :rules="matchrulesRow" label-width="auto" size="large">
  83. <el-form-item label="配合比报告编号" prop="name">
  84. <el-input v-model="matchformRowValue.reportNumber" placeholder="请输入" />
  85. </el-form-item>
  86. <el-form-item label="设计强度" prop="designStrength">
  87. <el-input v-model="matchformRowValue.designStrength" placeholder="请输入" />
  88. </el-form-item>
  89. <el-form-item label="水胶比" prop="waterBinderRatio">
  90. <el-input v-model="matchformRowValue.waterBinderRatio" placeholder="请输入" />
  91. </el-form-item>
  92. <el-form-item label="水泥" prop="cement">
  93. <el-input
  94. v-model="matchformRowValue.cement" placeholder="请输入"
  95. />
  96. </el-form-item>
  97. <el-form-item label="砂" prop="total">
  98. <el-input
  99. v-model="matchformRowValue.sand" placeholder="请输入"
  100. />
  101. </el-form-item>
  102. <el-form-item label="碎石1" prop="macadamOne">
  103. <el-input
  104. v-model="matchformRowValue.macadamOne" placeholder="请输入"
  105. />
  106. </el-form-item>
  107. <el-form-item label="碎石2" prop="macadamTwo">
  108. <el-input
  109. v-model="matchformRowValue.macadamTwo" placeholder="请输入"
  110. />
  111. </el-form-item>
  112. <el-form-item label="碎石3" prop="macadamThree">
  113. <el-input
  114. v-model="matchformRowValue.macadamThree" placeholder="请输入"
  115. />
  116. </el-form-item>
  117. <el-form-item label="水" prop="water">
  118. <el-input
  119. v-model="matchformRowValue.water" placeholder="请输入"
  120. />
  121. </el-form-item>
  122. <el-form-item label="掺加剂" prop="admixture">
  123. <el-input
  124. v-model="matchformRowValue.admixture" placeholder="请输入"
  125. />
  126. </el-form-item>
  127. <el-form-item label="粉煤灰" prop="coalAsh">
  128. <el-input
  129. v-model="matchformRowValue.coalAsh" placeholder="请输入"
  130. />
  131. </el-form-item>
  132. <el-form-item label="矿渣粉" prop="slagPowder">
  133. <el-input
  134. v-model="matchformRowValue.slagPowder" placeholder="请输入"
  135. />
  136. </el-form-item>
  137. <el-form-item label="坍落度" prop="slumps">
  138. <el-input
  139. v-model="matchformRowValue.slumps" placeholder="请输入"
  140. />
  141. </el-form-item>
  142. <el-form-item label="单位体积重" prop="bulkDensity">
  143. <el-input
  144. v-model="matchformRowValue.bulkDensity " placeholder="请输入"
  145. />
  146. </el-form-item>
  147. <el-form-item label="28天抗压强度" prop="compressiveStrength">
  148. <el-input
  149. v-model="matchformRowValue.compressiveStrength " placeholder="请输入"
  150. />
  151. </el-form-item>
  152. </el-form>
  153. <template #footer>
  154. <div class="dialog-footer">
  155. <el-button size="large" @click="testModal = false">取消</el-button>
  156. <el-button v-if="tabsTypeKey === '0'" :loading="saveFormLoading" hc-btn type="primary" @click="saveFormClick">提交</el-button>
  157. <el-button v-if="tabsTypeKey === '1'" :loading="saveFormLoading" hc-btn type="primary" @click="matchsaveFormClick">提交</el-button>
  158. </div>
  159. </template>
  160. </hc-new-dialog>
  161. <!-- 导入 弹框 -->
  162. <hc-new-dialog v-model="importModal" :title="tabsTypeKey === '0' ? '导入原材' : '导入配合比'" @close="importModalClose">
  163. <div class="hc-import-modal-box">
  164. <div class="tip-box">
  165. <span>请先下载导入模板(</span>
  166. <a
  167. v-if="tabsTypeKey === '0'"
  168. class="text-link"
  169. href="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230822/dbb9c54a1bd831fb972bf9a6e9b2b478.xlsx"
  170. target="_blank"
  171. >原材导入模板</a>
  172. <a
  173. v-if="tabsTypeKey === '1'"
  174. class="text-link"
  175. href="https://view.officeapps.live.com/op/view.aspx?src=http%3A%2F%2Fbladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com%2F%2Fupload%2F20230828%2Fa877e37bfc414686fa70470bca1c9cd0.xlsx&wdOrigin=BROWSELINK"
  176. target="_blank"
  177. >配合比导入模板</a>
  178. <span> ),按模板样式编辑后,再点击"选择文件"按钮选择编辑好的文件,并点击底部的"确认导入"按钮即可导入成功!</span>
  179. </div>
  180. <div class="upload-box">
  181. <el-upload
  182. ref="uploadRef" v-model:file-list="fileList" :accept="accept" :action="action"
  183. :auto-upload="false" :data="addition" :headers="getTokenHeader()" :limit="1"
  184. :on-error="handleUploadError" :on-exceed="handleUploadExceed"
  185. :on-progress="handleUploadProgress" :on-success="handleUploadFinish"
  186. >
  187. <template #trigger>
  188. <el-button :loading="importLoading" type="primary">选择文件</el-button>
  189. </template>
  190. </el-upload>
  191. </div>
  192. </div>
  193. <template #footer>
  194. <div class="dialog-footer">
  195. <el-button size="large" @click="importModal = false">取消</el-button>
  196. <el-button
  197. :disabled="fileList.length <= 0" :loading="importLoading" hc-btn type="primary"
  198. @click="handleImportClick"
  199. >
  200. 确认导入
  201. </el-button>
  202. </div>
  203. </template>
  204. </hc-new-dialog>
  205. </HcNewCard>
  206. </div>
  207. </template>
  208. <script setup>
  209. import { onMounted, ref } from 'vue'
  210. import testApi from '~api/gauge/testdata'
  211. import { deepClone, formValidate, getArrValue } from 'js-fast-way'
  212. import { delMessageV2 } from '~com/message/index.js'
  213. import { useAppStore } from '~src/store'
  214. import { genFileId } from 'element-plus'
  215. import { getTokenHeader } from '~src/api/request/header'
  216. const useAppState = useAppStore()
  217. //全局变量
  218. const projectId = ref(useAppState.getProjectId)
  219. const contractId = ref(useAppState.getContractId)
  220. //渲染完成
  221. onMounted(() => {
  222. // searchForm.value.type = typeName
  223. getDataBytype()
  224. })
  225. //类型tab数据和相关处理
  226. const placeTitle = ref('请输入批准文号进行查询')
  227. const tabsTypeKey = ref('0')
  228. const tabsTypeData = ref([
  229. { key: '0', name: '原材' },
  230. { key: '1', name: '配合比' },
  231. ])
  232. const tableColumn = [
  233. { key: 'name', name: '材料名称' },
  234. { key: 'specification', name: '规格型号' },
  235. { key: 'manufacturers', name: '生产厂商' },
  236. { key: 'storageSite', name: '存放地点或厂号' },
  237. { key: 'batchNumber', name: '试验批准文号' },
  238. { key: 'total', name: '准备数量' },
  239. { key: 'action', name: '操作', width: '130' },
  240. ]
  241. //原材
  242. const tableData = ref([])
  243. //配比
  244. const matchData = ref([])
  245. const matchTableColumn = [
  246. { key: 'reportNumber', name: '配合比报告编号' },
  247. { key: 'designStrength', name: '设计强度' },
  248. { key: 'waterBinderRatio', name: '水胶比' },
  249. { key: 'cement', name: '水泥' },
  250. { key: 'sand', name: '砂' },
  251. { key: 'macadamOne', name: '碎石1' },
  252. { key: 'macadamTwo', name: '碎石2' },
  253. { key: 'macadamThree', name: '碎石3' },
  254. { key: 'water', name: '水' },
  255. { key: 'admixture', name: '掺加剂' },
  256. { key: 'coalAsh', name: '粉煤灰' },
  257. { key: 'slagPowder', name: '矿渣粉' },
  258. { key: 'slumps', name: '坍落度' },
  259. { key: 'bulkDensity', name: '单位体积重' },
  260. { key: 'compressiveStrength', name: '28天抗压强度' },
  261. { key: 'action', name: '操作', width: '130' },
  262. ]
  263. const matchtableLoading = ref(false)
  264. const tabsTypeChange = (item) => {
  265. tabsTypeKey.value = item?.key
  266. searchForm.value.type = item?.key
  267. searchForm.value.current = 1
  268. getDataBytype()
  269. if (item?.key === '0') {
  270. placeTitle.value = '请输入批准文号进行查询'
  271. action.value = '/api/blade-manager/rawMaterials/importRawMaterialsInfo'
  272. } else {
  273. placeTitle.value = '请输入报告编号进行查询'
  274. action.value = '/api//blade-manager/mixProportion/importMixProportionInfo'
  275. }
  276. }
  277. //获取原材数据
  278. const getMatchTableData = async () => {
  279. matchtableLoading.value = true
  280. const { error, code, data } = await testApi.queryListProp({
  281. ...searchForm.value,
  282. projectId:projectId.value,
  283. contractId:contractId.value,
  284. })
  285. //处理数据
  286. matchtableLoading.value = false
  287. if (!error && code === 200) {
  288. let records = getArrValue(data['records'])
  289. if (tabsTypeKey.value === '1') {
  290. matchData.value = records
  291. }
  292. searchForm.value.total = data.total || 0
  293. } else {
  294. matchData.value = []
  295. searchForm.value.total = 0
  296. }
  297. }
  298. //获取配合比数据
  299. const tableLoading = ref(false)
  300. const getTableData = async () => {
  301. tableLoading.value = true
  302. const { error, code, data } = await testApi.queryListData({
  303. ...searchForm.value,
  304. projectId:projectId.value,
  305. contractId:contractId.value,
  306. })
  307. //处理数据
  308. tableLoading.value = false
  309. if (!error && code === 200) {
  310. let records = getArrValue(data['records'])
  311. if (tabsTypeKey.value === '0') {
  312. tableData.value = records
  313. }
  314. searchForm.value.total = data.total || 0
  315. } else {
  316. tableData.value = []
  317. searchForm.value.total = 0
  318. }
  319. }
  320. const getDataBytype = ()=>{
  321. if (tabsTypeKey.value === '0') {
  322. getTableData()
  323. } else {
  324. getMatchTableData()
  325. }
  326. }
  327. //搜索表单
  328. const searchForm = ref({
  329. searchValue:'',
  330. current: 1, size: 20, total: 0,
  331. })
  332. //分页被点击
  333. const pageChange = ({ current, size }) => {
  334. searchForm.value.current = current
  335. searchForm.value.size = size
  336. getDataBytype()
  337. }
  338. const AddRowClick = ()=>{
  339. testModal.value = true
  340. formRowValue.value = {}
  341. matchformRowValue.value = {}
  342. }
  343. const searchClick = ()=>{
  344. searchForm.value.current = 1
  345. getDataBytype()
  346. }
  347. const keyUpEvent = (e)=>{
  348. if (e.key === 'Enter') {
  349. searchForm.value.current = 1
  350. getDataBytype()
  351. }
  352. }
  353. //新增编辑弹窗
  354. const testModal = ref (false)
  355. const formRowValue = ref({})
  356. const formRowRef = ref(null)
  357. const rulesRow = {
  358. name: {
  359. required: false,
  360. trigger: 'blur',
  361. message: '请输入材料名称',
  362. },
  363. specification: {
  364. required: false,
  365. trigger: 'blur',
  366. message: '请输入规格型号',
  367. },
  368. manufacturers: {
  369. required: false,
  370. trigger: 'blur',
  371. message: '请输入生产厂商',
  372. },
  373. storageSite: {
  374. required: false,
  375. trigger: 'blur',
  376. message: '请输入存放地点或厂号',
  377. },
  378. batchNumber: {
  379. required: false,
  380. trigger: 'blur',
  381. message: '请输入试验批准文号',
  382. },
  383. total: {
  384. required: false,
  385. trigger: 'blur',
  386. message: '请输入准备数量',
  387. },
  388. }
  389. const matchformRowRef = ref(null)
  390. const matchrulesRow = {
  391. reportNumber: {
  392. required: false,
  393. trigger: 'blur',
  394. message: '请输入',
  395. },
  396. designStrength: {
  397. required: false,
  398. trigger: 'blur',
  399. message: '请输入',
  400. },
  401. waterBinderRatio: {
  402. required: false,
  403. trigger: 'blur',
  404. message: '请输入',
  405. },
  406. cement: {
  407. required: false,
  408. trigger: 'blur',
  409. message: '请输入',
  410. },
  411. sand: {
  412. required: false,
  413. trigger: 'blur',
  414. message: '请输入',
  415. },
  416. macadamOne: {
  417. required: false,
  418. trigger: 'blur',
  419. message: '请输入',
  420. },
  421. macadamTwo: {
  422. required: false,
  423. trigger: 'blur',
  424. message: '请输入',
  425. },
  426. macadamThree: {
  427. required: false,
  428. trigger: 'blur',
  429. message: '请输入',
  430. },
  431. water: {
  432. required: false,
  433. trigger: 'blur',
  434. message: '请输入',
  435. },
  436. admixture: {
  437. required: false,
  438. trigger: 'blur',
  439. message: '请输入',
  440. },
  441. coalAsh: {
  442. required: false,
  443. trigger: 'blur',
  444. message: '请输入',
  445. },
  446. slagPowder: {
  447. required: false,
  448. trigger: 'blur',
  449. message: '请输入',
  450. },
  451. slumps: {
  452. required: false,
  453. trigger: 'blur',
  454. message: '请输入',
  455. },
  456. bulkDensity: {
  457. required: false,
  458. trigger: 'blur',
  459. message: '请输入',
  460. },
  461. compressiveStrength: {
  462. required: false,
  463. trigger: 'blur',
  464. message: '请输入',
  465. },
  466. }
  467. const matchformRowValue = ref({})
  468. const testModalClose = ()=>{
  469. testModal.value = false
  470. }
  471. const handleLevelEdit = (row)=>{
  472. console.log(row, '编辑')
  473. testModal.value = true
  474. const rows = deepClone(row)
  475. formRowValue.value = rows
  476. }
  477. const handleLevelDelete = (row)=>{
  478. console.log(row, '删除')
  479. delMessageV2(async (action, instance, done) => {
  480. if (action === 'confirm') {
  481. instance.confirmButtonLoading = true
  482. delData(row.id)
  483. instance.confirmButtonLoading = false
  484. done()
  485. } else {
  486. done()
  487. }
  488. })
  489. }
  490. //原材删除请求
  491. const delData = async (id) => {
  492. const { error, code } = await testApi.delData({ ids: id }, false)
  493. //判断状态
  494. if (!error && code === 200) {
  495. window?.$message?.success('删除成功')
  496. getDataBytype()
  497. } else {
  498. window?.$message?.error('删除失败')
  499. }
  500. }
  501. //配合比删除请求
  502. const matchdelData = async (id) => {
  503. const { error, code } = await testApi.matchdelData({ ids: id }, false)
  504. //判断状态
  505. if (!error && code === 200) {
  506. window?.$message?.success('删除成功')
  507. getDataBytype()
  508. } else {
  509. window?.$message?.error('删除失败')
  510. }
  511. }
  512. //配合比
  513. const handmatchEdit = (row)=>{
  514. console.log(row, '编辑')
  515. testModal.value = true
  516. const rows = deepClone(row)
  517. matchformRowValue.value = rows
  518. }
  519. const handmathDelete = (row)=>{
  520. console.log(row, '删除')
  521. delMessageV2(async (action, instance, done) => {
  522. if (action === 'confirm') {
  523. instance.confirmButtonLoading = true
  524. matchdelData(row.id)
  525. instance.confirmButtonLoading = false
  526. done()
  527. } else {
  528. done()
  529. }
  530. })
  531. }
  532. const saveFormLoading = ref(false)
  533. const saveFormClick = async ()=>{
  534. console.log('提交')
  535. const validate = await formValidate(formRowRef.value)
  536. if (validate) {
  537. const form = formRowValue.value
  538. form.projectId = projectId.value
  539. form.contractId = contractId.value
  540. if (form.id) {
  541. saveFormLoading.value = true
  542. const { error, code } = await testApi.updateSave(form, false)
  543. //判断状态
  544. saveFormLoading.value = false
  545. if (!error && code === 200) {
  546. testModal.value = false
  547. window?.$message?.success('保存成功')
  548. getDataBytype()
  549. } else {
  550. window?.$message?.error('保存失败')
  551. }
  552. } else {
  553. saveFormLoading.value = true
  554. const { error, code } = await testApi.addSave(form, false)
  555. //判断状态
  556. saveFormLoading.value = false
  557. if (!error && code === 200) {
  558. testModal.value = false
  559. window?.$message?.success('新增成功')
  560. getDataBytype()
  561. } else {
  562. window?.$message?.error('新增失败')
  563. }
  564. }
  565. }
  566. }
  567. const matchsaveFormClick = async ()=>{
  568. console.log('提交配合比')
  569. const validate = await formValidate(matchformRowRef.value)
  570. if (validate) {
  571. const form = matchformRowValue.value
  572. form.projectId = projectId.value
  573. form.contractId = contractId.value
  574. if (form.id) {
  575. saveFormLoading.value = true
  576. const { error, code } = await testApi.matchupdateSave(form, false)
  577. //判断状态
  578. saveFormLoading.value = false
  579. if (!error && code === 200) {
  580. testModal.value = false
  581. window?.$message?.success('保存成功')
  582. getDataBytype()
  583. } else {
  584. window?.$message?.error('保存失败')
  585. }
  586. } else {
  587. saveFormLoading.value = true
  588. const { error, code } = await testApi.matchaddSave(form, false)
  589. //判断状态
  590. saveFormLoading.value = false
  591. if (!error && code === 200) {
  592. testModal.value = false
  593. window?.$message?.success('新增成功')
  594. getDataBytype()
  595. } else {
  596. window?.$message?.error('新增失败')
  597. }
  598. }
  599. }
  600. }
  601. //导入弹窗
  602. const importModal = ref(false)
  603. const importModalClose = ()=>{
  604. importModal.value = false
  605. }
  606. // const importModalClick = ()=>{
  607. // importModal.value = true
  608. // }
  609. //上传配置
  610. const uploadRef = ref(null)
  611. const addition = ref({})
  612. const fileList = ref([])
  613. const action = ref('/api/blade-manager/rawMaterials/importRawMaterialsInfo')
  614. const accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'
  615. //导入
  616. const importLoading = ref(false)
  617. const importModalClick = () => {
  618. addition.value = {
  619. projectId: projectId.value,
  620. contractId: contractId.value,
  621. }
  622. importLoading.value = false
  623. importModal.value = true
  624. }
  625. //上传一个文件时,重置
  626. const handleUploadExceed = (files) => {
  627. uploadRef.value?.clearFiles()
  628. const file = files[0]
  629. file.uid = genFileId()
  630. uploadRef.value?.handleStart(file)
  631. }
  632. //确认导入
  633. const handleImportClick = () => {
  634. uploadRef.value?.submit()
  635. }
  636. //上传中
  637. const handleUploadProgress = () => {
  638. importLoading.value = true
  639. }
  640. //上传完成
  641. const handleUploadFinish = () => {
  642. importLoading.value = false
  643. importModal.value = false
  644. window?.$message?.success('导入成功')
  645. uploadRef.value?.clearFiles()
  646. getDataBytype()
  647. }
  648. //上传失败
  649. const handleUploadError = (err) => {
  650. let myError = err.toString()//转字符串
  651. myError = myError.replace('UploadAjaxError: ', '') // 去掉前面的" Error: "
  652. myError = JSON.parse(myError)//转对象
  653. window?.$message?.error(myError.msg)
  654. importLoading.value = false
  655. }
  656. </script>
  657. <style lang='scss' scoped>
  658. .hc-layout-box {
  659. position: relative;
  660. height: 100%;
  661. }
  662. </style>