summary.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <script setup lang="ts">
  2. import dayjs from 'dayjs'
  3. import { rangeShortcuts } from '@/utils/formatTime'
  4. import { useUserStore } from '@/store/modules/user'
  5. import DailyStatistics from './components/DailyStatistics.vue'
  6. import NonProductionEfficiency from './components/NonProductionEfficiency.vue'
  7. defineOptions({
  8. name: 'IotRhDailyReportSummary'
  9. })
  10. const deptId = useUserStore().getUser.deptId
  11. interface Query {
  12. pageNo: number
  13. pageSize: number
  14. deptId: number
  15. contractName?: string
  16. taskName?: string
  17. createTime: string[]
  18. }
  19. const id = deptId
  20. const createDefaultQuery = (): Query => ({
  21. pageNo: 1,
  22. pageSize: 10,
  23. deptId: deptId,
  24. contractName: '',
  25. taskName: '',
  26. createTime: [
  27. ...rangeShortcuts[1].value().map((item) => dayjs(item).format('YYYY-MM-DD HH:mm:ss'))
  28. ]
  29. })
  30. const query = ref<Query>(createDefaultQuery())
  31. const activeTab = ref<'日报统计' | '非生产时效'>('日报统计')
  32. const deptName = ref('瑞恒兴域')
  33. const refreshKey = ref(0)
  34. const handleDeptNodeClick = (node: any) => {
  35. deptName.value = node.name
  36. handleQuery()
  37. }
  38. const handleQuery = () => {
  39. query.value.pageNo = 1
  40. refreshKey.value += 1
  41. }
  42. const resetQuery = () => {
  43. query.value = createDefaultQuery()
  44. deptName.value = '瑞恒兴域'
  45. handleQuery()
  46. }
  47. </script>
  48. <template>
  49. <div
  50. class="grid grid-cols-[auto_1fr] grid-rows-[62px_48px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
  51. <DeptTreeSelect
  52. :deptId="id"
  53. :top-id="157"
  54. v-model="query.deptId"
  55. @node-click="handleDeptNodeClick"
  56. class="row-span-3" />
  57. <el-form
  58. size="default"
  59. class="bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-8 gap-8 flex items-center justify-between">
  60. <div class="flex items-center gap-8">
  61. <el-form-item label="项目">
  62. <el-input
  63. v-model="query.contractName"
  64. placeholder="请输入项目"
  65. clearable
  66. @keyup.enter="handleQuery()"
  67. class="!w-240px" />
  68. </el-form-item>
  69. <el-form-item label="任务">
  70. <el-input
  71. v-model="query.taskName"
  72. placeholder="请输入任务"
  73. clearable
  74. @keyup.enter="handleQuery()"
  75. class="!w-240px" />
  76. </el-form-item>
  77. <el-form-item label="创建时间">
  78. <el-date-picker
  79. v-model="query.createTime"
  80. value-format="YYYY-MM-DD HH:mm:ss"
  81. type="daterange"
  82. start-placeholder="开始日期"
  83. end-placeholder="结束日期"
  84. :shortcuts="rangeShortcuts"
  85. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  86. class="!w-220px" />
  87. </el-form-item>
  88. </div>
  89. <el-form-item>
  90. <el-button type="primary" @click="handleQuery()">
  91. <Icon icon="ep:search" class="mr-5px" /> 搜索
  92. </el-button>
  93. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  94. </el-form-item>
  95. </el-form>
  96. <el-button-group class="justify-self-start self-center">
  97. <el-button
  98. size="default"
  99. :type="activeTab === '日报统计' ? 'primary' : 'default'"
  100. @click="activeTab = '日报统计'">
  101. 日报统计
  102. </el-button>
  103. <el-button
  104. size="default"
  105. :type="activeTab === '非生产时效' ? 'primary' : 'default'"
  106. @click="activeTab = '非生产时效'">
  107. 非生产时效
  108. </el-button>
  109. </el-button-group>
  110. <DailyStatistics
  111. v-if="activeTab === '日报统计'"
  112. :query="query"
  113. :dept-name="deptName"
  114. :refresh-key="refreshKey" />
  115. <NonProductionEfficiency
  116. v-else
  117. :query="query"
  118. :dept-name="deptName"
  119. :refresh-key="refreshKey" />
  120. </div>
  121. </template>
  122. <style scoped>
  123. :deep(.el-form-item) {
  124. margin-bottom: 0;
  125. }
  126. </style>