index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782
  1. <template>
  2. <ContentWrap >
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="68px"
  10. style="margin-left: 20px"
  11. >
  12. <el-form-item label="标本编号" prop="specimenNumber">
  13. <el-input
  14. v-model="queryParams.specimenNumber"
  15. placeholder="请输入标本编号"
  16. clearable
  17. @keyup.enter="handleQuery"
  18. class="!w-240px"
  19. />
  20. </el-form-item>
  21. <el-form-item label="中文名称" prop="chineseName">
  22. <el-input
  23. v-model="queryParams.chineseName"
  24. placeholder="请输入中文名称"
  25. clearable
  26. @keyup.enter="handleQuery"
  27. class="!w-240px"
  28. />
  29. </el-form-item>
  30. <!-- <el-form-item label="标本类型" prop="specimenType">-->
  31. <!-- <el-select-->
  32. <!-- v-model="queryParams.specimenType"-->
  33. <!-- placeholder="请选择标本类型(矿物、岩石矿石、化石、陨石)"-->
  34. <!-- clearable-->
  35. <!-- class="!w-240px"-->
  36. <!-- >-->
  37. <!-- <el-option-->
  38. <!-- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SPECIMEN_TYPE)"-->
  39. <!-- :key="dict.value"-->
  40. <!-- :label="dict.label"-->
  41. <!-- :value="dict.value"-->
  42. <!-- />-->
  43. <!-- </el-select>-->
  44. <!-- </el-form-item>-->
  45. <!-- <el-form-item label="资产号" prop="assetNumber">-->
  46. <!-- <el-input-->
  47. <!-- v-model="queryParams.assetNumber"-->
  48. <!-- placeholder="请输入资产号"-->
  49. <!-- clearable-->
  50. <!-- @keyup.enter="handleQuery"-->
  51. <!-- class="!w-240px"-->
  52. <!-- />-->
  53. <!-- </el-form-item>-->
  54. <!-- <el-form-item label="存放位置" prop="storageLocation">-->
  55. <!-- <el-input-->
  56. <!-- v-model="queryParams.storageLocation"-->
  57. <!-- placeholder="请输入存放位置"-->
  58. <!-- clearable-->
  59. <!-- @keyup.enter="handleQuery"-->
  60. <!-- class="!w-240px"-->
  61. <!-- />-->
  62. <!-- </el-form-item>-->
  63. <!-- <el-form-item label="英文名称" prop="englishName">-->
  64. <!-- <el-input-->
  65. <!-- v-model="queryParams.englishName"-->
  66. <!-- placeholder="请输入英文名称"-->
  67. <!-- clearable-->
  68. <!-- @keyup.enter="handleQuery"-->
  69. <!-- class="!w-240px"-->
  70. <!-- />-->
  71. <!-- </el-form-item>-->
  72. <el-form-item label="成分" prop="composition">
  73. <el-input
  74. v-model="queryParams.composition"
  75. placeholder="请输入成分"
  76. clearable
  77. @keyup.enter="handleQuery"
  78. class="!w-240px"
  79. />
  80. </el-form-item>
  81. <!-- <el-form-item label="产地" prop="origin">-->
  82. <!-- <el-input-->
  83. <!-- v-model="queryParams.origin"-->
  84. <!-- placeholder="请输入产地"-->
  85. <!-- clearable-->
  86. <!-- @keyup.enter="handleQuery"-->
  87. <!-- class="!w-240px"-->
  88. <!-- />-->
  89. <!-- </el-form-item>-->
  90. <el-form-item label="时代" prop="era">
  91. <el-input
  92. v-model="queryParams.era"
  93. placeholder="请输入时代"
  94. clearable
  95. @keyup.enter="handleQuery"
  96. class="!w-240px"
  97. />
  98. </el-form-item>
  99. <!-- <el-form-item label="保存地层" prop="preservedLayer">-->
  100. <!-- <el-input-->
  101. <!-- v-model="queryParams.preservedLayer"-->
  102. <!-- placeholder="请输入保存地层"-->
  103. <!-- clearable-->
  104. <!-- @keyup.enter="handleQuery"-->
  105. <!-- class="!w-240px"-->
  106. <!-- />-->
  107. <!-- </el-form-item>-->
  108. <!-- <el-form-item label="陨石类型" prop="meteoriteType">-->
  109. <!-- <el-input-->
  110. <!-- v-model="queryParams.meteoriteType"-->
  111. <!-- placeholder="请输入陨石类型"-->
  112. <!-- clearable-->
  113. <!-- @keyup.enter="handleQuery"-->
  114. <!-- class="!w-240px"-->
  115. <!-- />-->
  116. <!-- </el-form-item>-->
  117. <el-form-item label="国际命名" prop="internationalName">
  118. <el-input
  119. v-model="queryParams.internationalName"
  120. placeholder="请输入国际命名"
  121. clearable
  122. @keyup.enter="handleQuery"
  123. class="!w-240px"
  124. />
  125. </el-form-item>
  126. <!-- <el-form-item label="发现时间" prop="discoveryTime">-->
  127. <!-- <el-date-picker-->
  128. <!-- v-model="queryParams.discoveryTime"-->
  129. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  130. <!-- type="daterange"-->
  131. <!-- start-placeholder="开始日期"-->
  132. <!-- end-placeholder="结束日期"-->
  133. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  134. <!-- class="!w-220px"-->
  135. <!-- />-->
  136. <!-- </el-form-item>-->
  137. <!-- <el-form-item label="降落时间" prop="fallTime">-->
  138. <!-- <el-date-picker-->
  139. <!-- v-model="queryParams.fallTime"-->
  140. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  141. <!-- type="daterange"-->
  142. <!-- start-placeholder="开始日期"-->
  143. <!-- end-placeholder="结束日期"-->
  144. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  145. <!-- class="!w-220px"-->
  146. <!-- />-->
  147. <!-- </el-form-item>-->
  148. <el-form-item label="保存类型" prop="preservationType">
  149. <el-select
  150. v-model="queryParams.preservationType"
  151. placeholder="请选择保存类型(标本、光片、薄片模型及其他)"
  152. clearable
  153. class="!w-240px"
  154. >
  155. <el-option
  156. v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SPECIMEN_INFO)"
  157. :key="dict.value"
  158. :label="dict.label"
  159. :value="dict.value"
  160. />
  161. </el-select>
  162. </el-form-item>
  163. <!-- <el-form-item label="尺寸" prop="size">-->
  164. <!-- <el-input-->
  165. <!-- v-model="queryParams.size"-->
  166. <!-- placeholder="请输入尺寸"-->
  167. <!-- clearable-->
  168. <!-- @keyup.enter="handleQuery"-->
  169. <!-- class="!w-240px"-->
  170. <!-- />-->
  171. <!-- </el-form-item>-->
  172. <!-- <el-form-item label="重量" prop="weight">-->
  173. <!-- <el-input-->
  174. <!-- v-model="queryParams.weight"-->
  175. <!-- placeholder="请输入重量"-->
  176. <!-- clearable-->
  177. <!-- @keyup.enter="handleQuery"-->
  178. <!-- class="!w-240px"-->
  179. <!-- />-->
  180. <!-- </el-form-item>-->
  181. <el-form-item label="来源" prop="source">
  182. <el-select
  183. v-model="queryParams.source"
  184. placeholder="请选择来源(采购、捐赠、采集)"
  185. clearable
  186. class="!w-240px"
  187. >
  188. <el-option
  189. v-for="dict in getIntDictOptions(DICT_TYPE. MUSEUMS_SOURCE)"
  190. :key="dict.value"
  191. :label="dict.label"
  192. :value="dict.value"
  193. />
  194. </el-select>
  195. </el-form-item>
  196. <!-- <el-form-item label="标本提供者" prop="provider">-->
  197. <!-- <el-input-->
  198. <!-- v-model="queryParams.provider"-->
  199. <!-- placeholder="请输入标本提供者(供应商、捐赠人、采集人)"-->
  200. <!-- clearable-->
  201. <!-- @keyup.enter="handleQuery"-->
  202. <!-- class="!w-240px"-->
  203. <!-- />-->
  204. <!-- </el-form-item>-->
  205. <el-form-item label="入藏时间" prop="acquisitionTime">
  206. <el-date-picker
  207. v-model="queryParams.acquisitionTime"
  208. value-format="YYYY-MM-DD HH:mm:ss"
  209. type="daterange"
  210. start-placeholder="开始日期"
  211. end-placeholder="结束日期"
  212. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  213. class="!w-220px"
  214. />
  215. </el-form-item>
  216. <el-form-item label="用途" prop="purpose">
  217. <el-input
  218. v-model="queryParams.purpose"
  219. placeholder="请输入用途"
  220. clearable
  221. @keyup.enter="handleQuery"
  222. class="!w-240px"
  223. />
  224. </el-form-item>
  225. <!-- <el-form-item label="馆藏状态" prop="collectionStatus">-->
  226. <!-- <el-select-->
  227. <!-- v-model="queryParams.collectionStatus"-->
  228. <!-- placeholder="请选择馆藏状态(在馆、借出)"-->
  229. <!-- clearable-->
  230. <!-- class="!w-240px"-->
  231. <!-- >-->
  232. <!-- <el-option-->
  233. <!-- v-for="dict in getIntDictOptions(DICT_TYPE.MUSEUMS_SPECIMEN_INFO)"-->
  234. <!-- :key="dict.value"-->
  235. <!-- :label="dict.label"-->
  236. <!-- :value="dict.value"-->
  237. <!-- />-->
  238. <!-- </el-select>-->
  239. <!-- </el-form-item>-->
  240. <!-- <el-form-item label="备注" prop="notes">-->
  241. <!-- <el-input-->
  242. <!-- v-model="queryParams.notes"-->
  243. <!-- placeholder="请输入备注"-->
  244. <!-- clearable-->
  245. <!-- @keyup.enter="handleQuery"-->
  246. <!-- class="!w-240px"-->
  247. <!-- />-->
  248. <!-- </el-form-item>-->
  249. <!-- <el-form-item label="图片名称" prop="imageName">-->
  250. <!-- <el-input-->
  251. <!-- v-model="queryParams.imageName"-->
  252. <!-- placeholder="请输入图片名称"-->
  253. <!-- clearable-->
  254. <!-- @keyup.enter="handleQuery"-->
  255. <!-- class="!w-240px"-->
  256. <!-- />-->
  257. <!-- </el-form-item>-->
  258. <!-- <el-form-item label="图片路径" prop="imagePath">-->
  259. <!-- <el-input-->
  260. <!-- v-model="queryParams.imagePath"-->
  261. <!-- placeholder="请输入图片路径"-->
  262. <!-- clearable-->
  263. <!-- @keyup.enter="handleQuery"-->
  264. <!-- class="!w-240px"-->
  265. <!-- />-->
  266. <!-- </el-form-item>-->
  267. <!-- <el-form-item label="创建时间" prop="createTime">-->
  268. <!-- <el-date-picker-->
  269. <!-- v-model="queryParams.createTime"-->
  270. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  271. <!-- type="daterange"-->
  272. <!-- start-placeholder="开始日期"-->
  273. <!-- end-placeholder="结束日期"-->
  274. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  275. <!-- class="!w-220px"-->
  276. <!-- />-->
  277. <!-- </el-form-item>-->
  278. <!-- <el-form-item label="注销原因" prop="deletedReason">-->
  279. <!-- <el-input-->
  280. <!-- v-model="queryParams.deletedReason"-->
  281. <!-- placeholder="请输入注销原因"-->
  282. <!-- clearable-->
  283. <!-- @keyup.enter="handleQuery"-->
  284. <!-- class="!w-240px"-->
  285. <!-- />-->
  286. <!--&lt;!&ndash; </el-form-item>&ndash;&gt;-->
  287. <!-- <el-form-item label="入库操作员" prop="operator">-->
  288. <!-- <el-input-->
  289. <!-- v-model="queryParams.operator"-->
  290. <!-- placeholder="请输入入库操作员"-->
  291. <!-- clearable-->
  292. <!-- @keyup.enter="handleQuery"-->
  293. <!-- class="!w-240px"-->
  294. <!-- />-->
  295. <!-- </el-form-item>-->
  296. <!-- <el-form-item label="入库时间" prop="entryDate">-->
  297. <!-- <el-date-picker-->
  298. <!-- v-model="queryParams.entryDate"-->
  299. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  300. <!-- type="daterange"-->
  301. <!-- start-placeholder="开始日期"-->
  302. <!-- end-placeholder="结束日期"-->
  303. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  304. <!-- class="!w-220px"-->
  305. <!-- />-->
  306. <!-- </el-form-item>-->
  307. <el-form-item>
  308. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  309. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  310. <el-button
  311. type="primary"
  312. plain
  313. @click="openForm('create')"
  314. v-hasPermi="['museums:specimen-info:create']"
  315. >
  316. <Icon icon="ep:plus" class="mr-5px" /> 单个新增
  317. </el-button>
  318. <el-button
  319. type="warning"
  320. plain
  321. @click="handleImport"
  322. v-hasPermi="['museums:specimen-info:import']"
  323. >
  324. <Icon icon="ep:download" /> 批量导入
  325. </el-button>
  326. <el-button
  327. type="success"
  328. plain
  329. @click="handleExport"
  330. :loading="exportLoading"
  331. >
  332. <Icon icon="ep:upload" class="mr-5px" /> 导出
  333. </el-button>
  334. <el-button
  335. type="success"
  336. plain
  337. @click="labelExport"
  338. :loading="exportLoading"
  339. >
  340. <Icon icon="ep:upload" class="mr-5px" /> 制作标签
  341. </el-button>
  342. </el-form-item>
  343. </el-form>
  344. </ContentWrap>
  345. <!-- 列表 -->
  346. <ContentWrap>
  347. <el-segmented block v-model="queryParams.specimenType" :options="options" size="large" @update:modelValue="handleSegmentedChange"/>
  348. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @selection-change="handleSelectionChange">
  349. <el-table-column type="selection" width="55" />
  350. <!-- <el-table-column label="序号" align="center" prop="id" />-->
  351. <el-table-column label="标本编号" align="center" prop="specimenNumber" />
  352. <el-table-column label="中文名称" align="center" prop="chineseName" />
  353. <el-table-column label="标本类型" align="center" prop="specimenType">
  354. <template #default="scope">
  355. <dict-tag :type="DICT_TYPE.MUSEUMS_SPECIMEN_TYPE" :value="scope.row.specimenType" />
  356. </template>
  357. </el-table-column>
  358. <!-- <el-table-column label="资产号" align="center" prop="assetNumber" />-->
  359. <el-table-column label="存放位置" align="center" prop="storageLocation" />
  360. <!-- <el-table-column label="英文名称" align="center" prop="englishName" />-->
  361. <!-- <el-table-column label="成分" align="center" prop="composition" />-->
  362. <!-- <el-table-column label="产地" align="center" prop="origin" />-->
  363. <!-- <el-table-column label="时代" align="center" prop="era" />-->
  364. <!-- <el-table-column label="保存地层" align="center" prop="preservedLayer" />-->
  365. <!-- <el-table-column label="陨石类型" align="center" prop="meteoriteType" />-->
  366. <!-- <el-table-column label="国际命名" align="center" prop="internationalName" />-->
  367. <!-- <el-table-column label="发现时间" align="center" prop="discoveryTime" />-->
  368. <!-- <el-table-column label="降落时间" align="center" prop="fallTime" />-->
  369. <el-table-column label="保存类型" align="center" prop="preservationType">
  370. <template #default="scope">
  371. <dict-tag :type="DICT_TYPE.MUSEUMS_SPECIMEN_INFO" :value="scope.row.preservationType" />
  372. </template>
  373. </el-table-column>
  374. <!-- <el-table-column label="尺寸" align="center" prop="size" />-->
  375. <!-- <el-table-column label="重量(g)" align="center" prop="weight" />-->
  376. <!-- <el-table-column label="来源" align="center" prop="source">-->
  377. <!-- <template #default="scope">-->
  378. <!-- <dict-tag :type="DICT_TYPE.MUSEUMS_SOURCE" :value="scope.row.source" />-->
  379. <!-- </template>-->
  380. <!-- </el-table-column>-->
  381. <!-- <el-table-column label="标本提供者(供应商、捐赠人、采集人)" align="center" prop="provider" />-->
  382. <!-- <el-table-column label="入藏时间" align="center" prop="acquisitionTime" />-->
  383. <!-- <el-table-column label="用途" align="center" prop="purpose" />-->
  384. <!-- <el-table-column label="描述" align="center" prop="description" />-->
  385. <el-table-column label="馆藏状态" align="center" prop="collectionStatus">
  386. <template #default="scope">
  387. <dict-tag :type="DICT_TYPE.MUSEUMS_COLLECTION_STATUS" :value="scope.row.collectionStatus" />
  388. </template>
  389. </el-table-column>
  390. <!-- <el-table-column label="备注" align="center" prop="notes" />-->
  391. <!-- <el-table-column label="图片名称" align="center" prop="imageName" />-->
  392. <el-table-column label="图片" align="center" prop="url" >
  393. <template #default="{ row }">
  394. <div class="demo-image__preview" v-if="queryParams" >
  395. <block v-for="(image, index) in row.imagePath" :key="index">
  396. <el-image
  397. style="width: 40px; height:40px;margin-right: 5px"
  398. class="h-80px w-80px"
  399. lazy
  400. :src="image"
  401. :preview-src-list="row.imagePath"
  402. preview-teleported
  403. fit="cover"
  404. />
  405. </block>
  406. </div>
  407. </template>
  408. </el-table-column>
  409. <!-- <el-table-column label="创建时间" align="center" prop="createTime" />-->
  410. <!-- <el-table-column label="注销原因" align="center" prop="deletedReason" />-->
  411. <!-- <el-table-column label="入库操作员" align="center" prop="operator" />-->
  412. <!-- <el-table-column-->
  413. <!-- label="入库时间"-->
  414. <!-- align="center"-->
  415. <!-- prop="entryDate"-->
  416. <!-- :formatter="dateFormatter"-->
  417. <!-- width="180px"-->
  418. <!-- />-->
  419. <el-table-column label="操作" align="center" min-width="150px" fixed="right">
  420. <template #default="scope">
  421. <el-button
  422. link
  423. @click="viewDetails(scope.row.id)"
  424. type="success"
  425. >查看</el-button>
  426. <el-button
  427. link
  428. type="primary"
  429. @click="openForm('update', scope.row.id)"
  430. v-hasPermi="['museums:specimen-info:update']"
  431. >
  432. 编辑
  433. </el-button>
  434. <el-button
  435. link
  436. type="danger"
  437. @click="handleDelete(scope.row.id)"
  438. v-hasPermi="['museums:specimen-info:delete']"
  439. >
  440. 删除
  441. </el-button>
  442. </template>
  443. </el-table-column>
  444. </el-table>
  445. <!-- 分页 -->
  446. <Pagination
  447. :total="total"
  448. v-model:page="queryParams.pageNo"
  449. v-model:limit="queryParams.pageSize"
  450. @pagination="getList"
  451. />
  452. </ContentWrap>
  453. <!-- 制作标签弹窗-->
  454. <el-dialog v-model="dialogTableVisible" title="标签制作" width="800">
  455. <div>
  456. <el-form :model="form" label-width="auto" style="max-width: 600px">
  457. <el-form-item label="Activity zone">
  458. <el-select v-model="form.region" placeholder="please select your zone">
  459. <el-option
  460. v-for="item in optionsLabel"
  461. :key="item.value"
  462. :label="item.label"
  463. :value="item.value"
  464. />
  465. </el-select>
  466. </el-form-item>
  467. </el-form>
  468. </div>
  469. </el-dialog>
  470. <!-- 表单弹窗:添加/修改 -->
  471. <SpecimenInfoForm ref="formRef" @success="getList" />
  472. <SpecimenImportForm ref="importFormRef" @success="getList" />
  473. </template>
  474. <script setup lang="ts">
  475. import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
  476. import {dateFormatter, formatDate} from '@/utils/formatTime'
  477. import download from '@/utils/download'
  478. import { SpecimenInfoApi, SpecimenInfoVO } from '@/api/museums/specimeninfo'
  479. import SpecimenInfoForm from './SpecimenInfoForm.vue'
  480. import SpecimenImportForm from './SpecimenImportForm.vue'
  481. import ImageImportForm from './imageImportForm.vue'
  482. /** 标本管理 列表 */
  483. defineOptions({ name: 'SpecimenInfo' })
  484. const message = useMessage() // 消息弹窗
  485. const { t } = useI18n() // 国际化
  486. const options = [
  487. { label: '总表', value: '' },
  488. { label: '矿物', value: '0' },
  489. { label: '岩石', value: '1' },
  490. { label: '矿石', value: '2' },
  491. { label: '化石', value: '3' },
  492. { label: '陨石', value: '4' }
  493. ]
  494. const loading = ref(true) // 列表的加载中
  495. const list = ref<SpecimenInfoVO[]>([]) // 列表的数据
  496. const total = ref(0) // 列表的总页数
  497. const queryParams = reactive({
  498. pageNo: 1,
  499. pageSize: 10,
  500. specimenType:'',
  501. specimenNumber: undefined,
  502. assetNumber: undefined,
  503. storageLocation: undefined,
  504. chineseName: undefined,
  505. englishName: undefined,
  506. composition: undefined,
  507. origin: undefined,
  508. era: undefined,
  509. preservedLayer: undefined,
  510. meteoriteType: undefined,
  511. internationalName: undefined,
  512. discoveryTime: [],
  513. fallTime: [],
  514. preservationType: undefined,
  515. size: undefined,
  516. weight: undefined,
  517. source: undefined,
  518. provider: undefined,
  519. acquisitionTime: [],
  520. purpose: undefined,
  521. description: undefined,
  522. collectionStatus: undefined,
  523. notes: undefined,
  524. imageName: undefined,
  525. imagePath: undefined,
  526. createTime: [],
  527. deletedReason: undefined,
  528. operator: undefined,
  529. entryDate: []
  530. })
  531. const queryFormRef = ref() // 搜索的表单
  532. const exportLoading = ref(false) // 导出的加载中
  533. /** 查询列表 */
  534. const getList = async () => {
  535. loading.value = true
  536. try {
  537. const data = await SpecimenInfoApi.getSpecimenInfoPage(queryParams)
  538. list.value = data.list
  539. total.value = data.total
  540. console.log(data )
  541. } finally {
  542. loading.value = false
  543. }
  544. }
  545. /** 搜索按钮操作 */
  546. const handleQuery = () => {
  547. queryParams.pageNo = 1
  548. getList()
  549. }
  550. /** 重置按钮操作 */
  551. const resetQuery = () => {
  552. queryFormRef.value.resetFields()
  553. handleQuery()
  554. }
  555. /** 添加/修改操作 */
  556. const formRef = ref()
  557. const openForm = (type: string, id?: number) => {
  558. formRef.value.open(type, id)
  559. }
  560. /** 删除按钮操作 */
  561. const handleDelete = async (id: number) => {
  562. // try {
  563. // // 删除的二次确认
  564. // await message.delConfirm()
  565. // // 发起删除
  566. // await SpecimenInfoApi.deleteSpecimenInfo(id)
  567. // message.success(t('common.delSuccess'))
  568. // // 刷新列表
  569. // await getList()
  570. // } catch {}
  571. ElMessageBox.prompt('请输入删除原因', '删除', {
  572. confirmButtonText: '确定',
  573. cancelButtonText: '取消',
  574. inputPattern: /.+/ ,
  575. inputErrorMessage: '删除原因必填',
  576. })
  577. .then(async ({ value }) => {
  578. try {
  579. await SpecimenInfoApi.deleteSpecimenInfo(id,value)
  580. await getList()
  581. ElMessage({
  582. type: 'success',
  583. message: `删除成功`,
  584. })
  585. } catch {}
  586. })
  587. .catch(() => {
  588. ElMessage({
  589. type: 'info',
  590. message: '取消删除',
  591. })
  592. })
  593. }
  594. /** 批量导入 */
  595. const importFormRef = ref()
  596. const handleImport = () => {
  597. importFormRef.value.open()
  598. }
  599. /** 导出按钮操作 */
  600. const handleExport = async () => {
  601. try {
  602. // 导出的二次确认
  603. await message.exportConfirm()
  604. // 发起导出
  605. exportLoading.value = true
  606. const data = await SpecimenInfoApi.exportSpecimenInfo(queryParams)
  607. download.excel(data, '标本管理.xls')
  608. } catch {
  609. } finally {
  610. exportLoading.value = false
  611. }
  612. }
  613. //字段类型
  614. const optionsLabel = [
  615. {
  616. value: 'specimenNumber',
  617. label: '标本编号',
  618. },
  619. {
  620. value: 'chineseName',
  621. label: '中文名称',
  622. },
  623. {
  624. value: 'specimenType',
  625. label: '标本类型',
  626. },
  627. {
  628. value: 'storageLocation',
  629. label: '存放位置',
  630. },
  631. {
  632. value: 'englishName',
  633. label: '英文名称',
  634. },
  635. {
  636. value: 'composition',
  637. label: '成分',
  638. },
  639. {
  640. value: 'origin',
  641. label: '产地',
  642. },
  643. {
  644. value: 'era',
  645. label: '时代',
  646. },
  647. {
  648. value: 'preservedLayer',
  649. label: '保存地层',
  650. },
  651. {
  652. value: 'meteoriteType',
  653. label: '陨石类型',
  654. },
  655. {
  656. value: 'internationalName',
  657. label: '国际命名',
  658. },
  659. {
  660. value: 'preservationType',
  661. label: '保存类型',
  662. },
  663. {
  664. value: 'size',
  665. label: '尺寸',
  666. },
  667. {
  668. value: 'preservationType',
  669. label: '保存类型',
  670. },
  671. {
  672. value: 'weight',
  673. label: '重量',
  674. },
  675. {
  676. value: 'source',
  677. label: '来源',
  678. },
  679. {
  680. value: 'provider',
  681. label: '标本提供者',
  682. },
  683. {
  684. value: 'purpose',
  685. label: '用途',
  686. },
  687. {
  688. value: 'source',
  689. label: '来源',
  690. },
  691. {
  692. value: 'provider',
  693. label: '标本提供者',
  694. },
  695. ]
  696. const selectedlabel = ref<any[]>([]) // 选中的标本
  697. const dialogTableVisible = ref(false) //弹窗开关
  698. /** 处理选中变化 */
  699. const handleSelectionChange = (selection: any[]) => {
  700. selectedlabel.value = selection
  701. }
  702. /** 导出标签操作 */
  703. const labelExport = async () => {
  704. try {
  705. // 导出的二次确认
  706. await message.exportConfirm()
  707. // 发起导出
  708. exportLoading.value = true
  709. if (selectedlabel.value.length === 0) {
  710. message.warning('请勾选要制作标签的标本')
  711. return
  712. }
  713. dialogTableVisible.value = true
  714. } catch {
  715. } finally {
  716. exportLoading.value = false
  717. }
  718. }
  719. /** 初始化 **/
  720. onMounted(() => {
  721. getList()
  722. })
  723. /** 查看页面 **/
  724. import { useRouter } from 'vue-router';
  725. import UserImportForm from "@/views/system/user/UserImportForm.vue";
  726. import {ref} from "vue";
  727. const router = useRouter();
  728. const viewDetails=(dataId: number) => {
  729. router.push({
  730. name: 'specimenDetails',
  731. query: {
  732. dataId: dataId,
  733. }
  734. })
  735. }
  736. /** 处理 el-segmented 变化事件 */
  737. const handleSegmentedChange = (value: string) => {
  738. queryParams.specimenType = value
  739. handleQuery()
  740. }
  741. </script>