index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. <template>
  2. <el-skeleton :loading="loading" animated>
  3. <ContentWrap>
  4. <!-- 搜索工作栏 -->
  5. <el-form
  6. class="-mb-15px"
  7. :model="queryParams"
  8. ref="queryFormRef"
  9. :inline="true"
  10. label-width="68px"
  11. >
  12. <el-form-item label="标本ID" prop="infoId">
  13. <el-input
  14. v-model="queryParams.infoId"
  15. placeholder="标本ID"
  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="specimenNumber">
  31. <el-input
  32. v-model="queryParams.specimenNumber"
  33. placeholder="请输入申请出库的标本编号"
  34. clearable
  35. @keyup.enter="handleQuery"
  36. class="!w-240px"
  37. />
  38. </el-form-item>
  39. <!-- <el-form-item label="申请人或申请单位" prop="applicantName">-->
  40. <!-- <el-input-->
  41. <!-- v-model="queryParams.applicantName"-->
  42. <!-- placeholder="请输入申请人或申请单位"-->
  43. <!-- clearable-->
  44. <!-- @keyup.enter="handleQuery"-->
  45. <!-- class="!w-240px"-->
  46. <!-- />-->
  47. <!-- </el-form-item>-->
  48. <el-form-item label="申请日期" prop="applicationDate">
  49. <el-date-picker
  50. v-model="queryParams.applicationDate"
  51. value-format="YYYY-MM-DD HH:mm:ss"
  52. type="daterange"
  53. start-placeholder="开始日期"
  54. end-placeholder="结束日期"
  55. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  56. class="!w-220px"
  57. />
  58. </el-form-item>
  59. <!-- <el-form-item label="申请出库的用途" prop="applicationUsage">-->
  60. <!-- <el-input-->
  61. <!-- v-model="queryParams.applicationUsage"-->
  62. <!-- placeholder="请输入申请出库的用途"-->
  63. <!-- clearable-->
  64. <!-- @keyup.enter="handleQuery"-->
  65. <!-- class="!w-240px"-->
  66. <!-- />-->
  67. <!-- </el-form-item>-->
  68. <!-- <el-form-item label="附件上传" prop="attachments">-->
  69. <!-- <el-input-->
  70. <!-- v-model="queryParams.attachments"-->
  71. <!-- placeholder="请输入附件上传"-->
  72. <!-- clearable-->
  73. <!-- @keyup.enter="handleQuery"-->
  74. <!-- class="!w-240px"-->
  75. <!-- />-->
  76. <!-- </el-form-item>-->
  77. <el-form-item label="审批状态" prop="status">
  78. <el-select
  79. v-model="queryParams.status"
  80. placeholder="请选择审批状态"
  81. clearable
  82. class="!w-240px"
  83. >
  84. <el-option label="请选择字典生成" value="" />
  85. </el-select>
  86. </el-form-item>
  87. <!-- <el-form-item label="备注信息" prop="remarks">-->
  88. <!-- <el-input-->
  89. <!-- v-model="queryParams.remarks"-->
  90. <!-- placeholder="请输入备注信息"-->
  91. <!-- clearable-->
  92. <!-- @keyup.enter="handleQuery"-->
  93. <!-- class="!w-240px"-->
  94. <!-- />-->
  95. <!-- </el-form-item>-->
  96. <!-- <el-form-item label="流程实例的编号" prop="processInstanceId">-->
  97. <!-- <el-input-->
  98. <!-- v-model="queryParams.processInstanceId"-->
  99. <!-- placeholder="请输入流程实例的编号"-->
  100. <!-- clearable-->
  101. <!-- @keyup.enter="handleQuery"-->
  102. <!-- class="!w-240px"-->
  103. <!-- />-->
  104. <!-- </el-form-item>-->
  105. <!-- <el-form-item label="出库员" prop="operator">-->
  106. <!-- <el-input-->
  107. <!-- v-model="queryParams.operator"-->
  108. <!-- placeholder="请输入出库员"-->
  109. <!-- clearable-->
  110. <!-- @keyup.enter="handleQuery"-->
  111. <!-- class="!w-240px"-->
  112. <!-- />-->
  113. <!-- </el-form-item>-->
  114. <!-- <el-form-item label="出库时间" prop="outgoingTime">-->
  115. <!-- <el-date-picker-->
  116. <!-- v-model="queryParams.outgoingTime"-->
  117. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  118. <!-- type="daterange"-->
  119. <!-- start-placeholder="开始日期"-->
  120. <!-- end-placeholder="结束日期"-->
  121. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  122. <!-- class="!w-220px"-->
  123. <!-- />-->
  124. <!-- </el-form-item>-->
  125. <!-- <el-form-item label="退还人" prop="returner">-->
  126. <!-- <el-input-->
  127. <!-- v-model="queryParams.returner"-->
  128. <!-- placeholder="请输入退还人"-->
  129. <!-- clearable-->
  130. <!-- @keyup.enter="handleQuery"-->
  131. <!-- class="!w-240px"-->
  132. <!-- />-->
  133. <!-- </el-form-item>-->
  134. <!-- <el-form-item label="点收人" prop="receiver">-->
  135. <!-- <el-input-->
  136. <!-- v-model="queryParams.receiver"-->
  137. <!-- placeholder="请输入点收人"-->
  138. <!-- clearable-->
  139. <!-- @keyup.enter="handleQuery"-->
  140. <!-- class="!w-240px"-->
  141. <!-- />-->
  142. <!-- </el-form-item>-->
  143. <!-- <el-form-item label="退还日期" prop="returnDate">-->
  144. <!-- <el-date-picker-->
  145. <!-- v-model="queryParams.returnDate"-->
  146. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  147. <!-- type="daterange"-->
  148. <!-- start-placeholder="开始日期"-->
  149. <!-- end-placeholder="结束日期"-->
  150. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  151. <!-- class="!w-220px"-->
  152. <!-- />-->
  153. <!-- </el-form-item>-->
  154. <!-- <el-form-item label="标本情况" prop="specimenCondition">-->
  155. <!-- <el-input-->
  156. <!-- v-model="queryParams.specimenCondition"-->
  157. <!-- placeholder="请输入标本情况"-->
  158. <!-- clearable-->
  159. <!-- @keyup.enter="handleQuery"-->
  160. <!-- class="!w-240px"-->
  161. <!-- />-->
  162. <!-- </el-form-item>-->
  163. <!-- <el-form-item label="创建时间" prop="createTime">-->
  164. <!-- <el-date-picker-->
  165. <!-- v-model="queryParams.createTime"-->
  166. <!-- value-format="YYYY-MM-DD HH:mm:ss"-->
  167. <!-- type="daterange"-->
  168. <!-- start-placeholder="开始日期"-->
  169. <!-- end-placeholder="结束日期"-->
  170. <!-- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"-->
  171. <!-- class="!w-220px"-->
  172. <!-- />-->
  173. <!-- </el-form-item>-->
  174. <el-form-item label="标本状态" prop="sampleStatus">
  175. <el-select
  176. v-model="queryParams.sampleStatus"
  177. placeholder="请选择标本状态"
  178. clearable
  179. class="!w-240px"
  180. >
  181. <el-option label="请选择字典生成" value="" />
  182. </el-select>
  183. </el-form-item>
  184. <el-form-item>
  185. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  186. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  187. <el-button
  188. type="primary"
  189. plain
  190. @click="openForm('create')"
  191. v-hasPermi="['museums:specimen-outbound:create']"
  192. >
  193. <Icon icon="ep:plus" class="mr-5px" /> 新增
  194. </el-button>
  195. <el-button
  196. type="success"
  197. plain
  198. @click="handleExport"
  199. :loading="exportLoading"
  200. v-hasPermi="['museums:specimen-outbound:export']"
  201. >
  202. <Icon icon="ep:download" class="mr-5px" /> 导出
  203. </el-button>
  204. </el-form-item>
  205. </el-form>
  206. </ContentWrap>
  207. <!-- 列表 -->
  208. <ContentWrap>
  209. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  210. <el-table-column label="序号" align="center" prop="id" />
  211. <el-table-column label="标本ID" align="center" prop="infoId" />
  212. <el-table-column label="中文名称" align="center" prop="chineseName" />
  213. <el-table-column label="申请出库的标本编号" align="center" prop="specimenNumber" />
  214. <el-table-column label="申请人或单位" align="center" prop="applicantName" />
  215. <el-table-column
  216. label="申请日期"
  217. align="center"
  218. prop="applicationDate"
  219. :formatter="dateFormatter"
  220. width="180px"
  221. />
  222. <el-table-column label="申请出库的用途" align="center" prop="applicationUsage" />
  223. <!-- <el-table-column label="附件上传" align="center" prop="attachments" />-->
  224. <el-table-column label="审批状态" align="center" prop="status" />
  225. <!-- <el-table-column label="备注信息" align="center" prop="remarks" />-->
  226. <!-- <el-table-column label="流程实例的编号" align="center" prop="processInstanceId" />-->
  227. <!-- <el-table-column label="出库员" align="center" prop="operator" />-->
  228. <el-table-column
  229. label="出库时间"
  230. align="center"
  231. prop="outgoingTime"
  232. :formatter="dateFormatter"
  233. width="180px"
  234. />
  235. <!-- <el-table-column label="退还人" align="center" prop="returner" />-->
  236. <!-- <el-table-column label="点收人" align="center" prop="receiver" />-->
  237. <el-table-column
  238. label="退还日期"
  239. align="center"
  240. prop="returnDate"
  241. :formatter="dateFormatter"
  242. width="180px"
  243. />
  244. <el-table-column label="标本情况" align="center" prop="specimenCondition" />
  245. <!-- <el-table-column-->
  246. <!-- label="创建时间"-->
  247. <!-- align="center"-->
  248. <!-- prop="createTime"-->
  249. <!-- :formatter="dateFormatter"-->
  250. <!-- width="180px"-->
  251. <!-- />-->
  252. <el-table-column label="标本状态" align="center" prop="sampleStatus" />
  253. <el-table-column label="操作" align="center" min-width="150px">
  254. <template #default="scope" >
  255. <el-button
  256. link
  257. type="danger"
  258. :disabled="!hasPermission"
  259. @click="handleApproval(scope.row.id)"
  260. >
  261. 审批
  262. </el-button>
  263. <el-button
  264. link
  265. type="primary"
  266. @click="openForm('update', scope.row.id)"
  267. v-hasPermi="['museums:specimen-outbound:update']"
  268. >
  269. 编辑
  270. </el-button>
  271. <el-button
  272. link
  273. type="danger"
  274. @click="handleDelete(scope.row.id)"
  275. v-hasPermi="['museums:specimen-outbound:delete']"
  276. >
  277. 删除
  278. </el-button>
  279. </template>
  280. </el-table-column>
  281. </el-table>
  282. <!-- 分页 -->
  283. <Pagination
  284. :total="total"
  285. v-model:page="queryParams.pageNo"
  286. v-model:limit="queryParams.pageSize"
  287. @pagination="getList"
  288. />
  289. </ContentWrap>
  290. <!-- 表单弹窗:出库/审批 -->
  291. <SpecimenOutboundForm ref="formRef" @success="getList" />
  292. <Approval ref="ApprovalRef" @success="getList" />
  293. </el-skeleton>
  294. </template>
  295. <script setup lang="ts">
  296. import { dateFormatter } from '@/utils/formatTime'
  297. import download from '@/utils/download'
  298. import { SpecimenOutboundApi, SpecimenOutboundVO } from '@/api/museums/specimenoutbound'
  299. import SpecimenOutboundForm from './SpecimenOutboundForm.vue'
  300. import {ref} from "vue";
  301. //import {SpecimenInfoApi} from "@/api/museums/specimeninfo";
  302. //import SpecimenImportForm from "@/views/museums/specimeninfo/SpecimenImportForm.vue";
  303. import Approval from "@/views/museums/specimenoutbound/approval.vue";
  304. /** 标本出库回库信息 列表 */
  305. defineOptions({ name: 'SpecimenOutbound' })
  306. // const dialogVisible = ref(false) // 弹窗的是否展示
  307. // const fileList = ref([]) // 文件列表
  308. // const formLoading = ref(false) // 表单的加载中
  309. // const updateSupport = ref(0) // 是否更新已经存在的用户数据
  310. // const uploadRef = ref()
  311. const message = useMessage() // 消息弹窗
  312. const { t } = useI18n() // 国际化
  313. const loading = ref(true) // 列表的加载中
  314. const list = ref<SpecimenOutboundVO[]>([]) // 列表的数据
  315. const total = ref(0) // 列表的总页数
  316. const queryParams = reactive({
  317. pageNo: 1,
  318. pageSize: 10,
  319. infoId: undefined,
  320. chineseName: undefined,
  321. specimenNumber: undefined,
  322. applicantName: undefined,
  323. applicationDate: [],
  324. applicationUsage: undefined,
  325. attachments: undefined,
  326. status: undefined,
  327. remarks: undefined,
  328. processInstanceId: undefined,
  329. operator: undefined,
  330. outgoingTime: [],
  331. returner: undefined,
  332. receiver: undefined,
  333. returnDate: [],
  334. specimenCondition: undefined,
  335. createTime: [],
  336. sampleStatus: undefined
  337. })
  338. const queryFormRef = ref() // 搜索的表单
  339. const exportLoading = ref(false) // 导出的加载中
  340. /** 查询列表 */
  341. const getList = async () => {
  342. loading.value = true
  343. try {
  344. const data = await SpecimenOutboundApi.getSpecimenOutboundPage(queryParams)
  345. list.value = data.list
  346. total.value = data.total
  347. } finally {
  348. loading.value = false
  349. }
  350. }
  351. /** 搜索按钮操作 */
  352. const handleQuery = () => {
  353. queryParams.pageNo = 1
  354. getList()
  355. }
  356. /** 重置按钮操作 */
  357. const resetQuery = () => {
  358. queryFormRef.value.resetFields()
  359. handleQuery()
  360. }
  361. /** 添加/修改操作 */
  362. const formRef = ref()
  363. const openForm = (type: string, id?: number) => {
  364. formRef.value.open(type, id)
  365. }
  366. /** 审批按钮操作 */
  367. const hasPermission = ref(checkUserPermission('APPROVE'));
  368. // 检查用户权限的方法
  369. function checkUserPermission(permission) {
  370. // 这里应该是您的权限检查逻辑
  371. // 例如,从Vuex store或者API获取用户权限列表,并检查是否包含所需权限
  372. const userPermissions = getUserPermissions(); // 获取用户权限列表的示例方法
  373. return userPermissions.includes(permission);
  374. }
  375. // 获取用户权限列表的示例方法
  376. function getUserPermissions() {
  377. // 示例返回一个权限数组
  378. return ['APPROVE', 'OTHER_PERMISSION'];
  379. }
  380. // 处理审批的方法
  381. function handleApproval(id) {
  382. if (hasPermission.value) {
  383. // 用户具有权限,执行审批逻辑
  384. console.log('审批ID:', id);
  385. // ... 审批逻辑 ...
  386. } else {
  387. // 用户没有权限,可以提示用户或不做任何操作
  388. console.log('用户没有审批权限');
  389. }
  390. }
  391. const ApprovalRef = ref()
  392. // const handleApproval = (type: string, id?: number) => {
  393. // ApprovalRef.value.open(type, id)
  394. //
  395. // }
  396. /** 删除按钮操作 */
  397. const handleDelete = async (id: number) => {
  398. try {
  399. // 删除的二次确认
  400. await message.delConfirm()
  401. // 发起删除
  402. await SpecimenOutboundApi.deleteSpecimenOutbound(id)
  403. message.success(t('common.delSuccess'))
  404. // 刷新列表
  405. await getList()
  406. } catch {}
  407. }
  408. /** 导出按钮操作 */
  409. const handleExport = async () => {
  410. try {
  411. // 导出的二次确认
  412. await message.exportConfirm()
  413. // 发起导出
  414. exportLoading.value = true
  415. const data = await SpecimenOutboundApi.exportSpecimenOutbound(queryParams)
  416. download.excel(data, '标本出库回库信息.xls')
  417. } catch {
  418. } finally {
  419. exportLoading.value = false
  420. }
  421. }
  422. /** 初始化 **/
  423. onMounted(() => {
  424. getList()
  425. })
  426. </script>