index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <div class="__normal-page">
  3. <div class="__normal-content">
  4. <CusContent
  5. v-model:tableHead="tableHead"
  6. @handleReset="handleReset"
  7. @handleSearch="onSearch"
  8. >
  9. <template #fieldOut>
  10. <CusForm labelWidth="100px" @handleEnter="onSearch">
  11. <CusFormColumn
  12. label="席位编号:"
  13. v-model:param="queryForm.seatSerialNumber"/>
  14. <CusFormColumn
  15. label="单位:"
  16. link="select"
  17. v-model:param="queryForm.unitId"
  18. :options="$store.state.dictionary.deptList"/>
  19. <CusFormColumn
  20. label="提交人员:"
  21. v-model:param="queryForm.submitter"/>
  22. <CusFormColumn
  23. label="日志日期:"
  24. link="date"
  25. type="daterange"
  26. v-model:param="queryForm.dutyDate"/>
  27. <CusFormColumn
  28. label="提交时间:"
  29. link="datetime"
  30. type="datetimerange"
  31. v-model:param="queryForm.submitDate"/>
  32. <CusSearchButtons
  33. @handleReset="handleReset"
  34. @handleSearch="onSearch"
  35. />
  36. </CusForm>
  37. </template>
  38. <template #buttons>
  39. <div class="__cus-button_submit __hover" @click="onAdd">
  40. <SvgIcon name="add" size="16"/>新增
  41. </div>
  42. </template>
  43. <template #table>
  44. <CusTable
  45. v-loading="loading"
  46. ref="ref_cusTable"
  47. :tableData="queryResult.tableData"
  48. :tableHead="tableHead"
  49. :total="queryResult.total"
  50. :page="queryPage.pageNum"
  51. :pageSize="queryPage.pageSize"
  52. @handlePage="handlePage"
  53. >
  54. <template #do-column-value="{ scope }">
  55. <div class="__cus-table_do">
  56. <div class="__cus-table_do-green __hover" @click="onView(scope.row)">
  57. <SvgIcon name="view" size="16"/>查看
  58. </div>
  59. <div class="__cus-table_do-blue __hover" @click="onEdit(scope.row)">
  60. <SvgIcon name="edit" size="16"/>编辑
  61. </div>
  62. <div class="__cus-table_do-red __hover" @click="onDel(scope.row)">
  63. <SvgIcon name="del" size="16"/>删除
  64. </div>
  65. </div>
  66. </template>
  67. </CusTable>
  68. </template>
  69. </CusContent>
  70. </div>
  71. <DetailCom v-model:show="showDetail" :transfer="transfer" @refresh="handleSearch()"/>
  72. </div>
  73. </template>
  74. <script lang="ts">
  75. import {
  76. defineComponent,
  77. computed,
  78. onMounted,
  79. ref,
  80. reactive,
  81. watch,
  82. getCurrentInstance,
  83. ComponentInternalInstance,
  84. toRefs,
  85. nextTick
  86. } from 'vue'
  87. import {useStore} from 'vuex'
  88. import {useRouter, useRoute} from 'vue-router'
  89. import DetailCom from './detail.vue'
  90. import {ElMessage, ElMessageBox} from 'element-plus'
  91. import {delDailyReportDelete, getDailyReportList} from "@/api/modules/daily";
  92. export default defineComponent({
  93. name: '',
  94. components: {
  95. DetailCom
  96. },
  97. setup(props, {emit}) {
  98. const store = useStore();
  99. const router = useRouter();
  100. const route = useRoute();
  101. const that = (getCurrentInstance() as ComponentInternalInstance).appContext.config.globalProperties
  102. const state = reactive({
  103. // 加载中
  104. loading: false,
  105. // 查询分页参数
  106. queryPage: {
  107. pageNum: 1,
  108. pageSize: 10
  109. },
  110. // 查询结果
  111. queryResult: {
  112. total: 0,
  113. tableData: []
  114. },
  115. // 查询表单参数
  116. queryForm: <any>{},
  117. // 查询表单参数备份
  118. back_queryForm: {},
  119. // 表格表头
  120. tableHead: [
  121. {value: "title", label: "日志标题", show: true},
  122. {value: "seatSerialNumber", label: "席位编号", show: true},
  123. {value: "unitName", label: "单位", show: true},
  124. {value: "submitter", label: "提交人员", show: true},
  125. {value: "dutyTime", label: "日志日期", show: true},
  126. {value: "submitTime", label: "提交时间", show: true},
  127. {value: "do", label: "操作", show: true, popover: true, width: 260},
  128. ],
  129. showDetail: false,
  130. transfer: {}
  131. });
  132. const ref_cusTable = ref()
  133. // 获取字典
  134. const initDictionary = () => {
  135. store.dispatch('dictionary/LOAD_DEPT')
  136. }
  137. // 查询分页参数改变处理方法
  138. const handlePage = ({page, pageSize}: any) => {
  139. state.queryPage.pageNum = page
  140. state.queryPage.pageSize = pageSize
  141. handleSearch(page, pageSize)
  142. }
  143. // 重置查询表单方法
  144. const handleReset = () => {
  145. state.queryForm = {}
  146. state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
  147. handleSearch()
  148. }
  149. // 查询方法
  150. const handleSearch = (page = 1, pageSize = 10) => {
  151. const queryParams: any = {
  152. pageNum: page,
  153. pageSize: pageSize,
  154. }
  155. // 添加表单参数
  156. for (const [k, v] of Object.entries(state.back_queryForm)) {
  157. if (that.$util.isValue(v)) {
  158. if (k === 'unitId') {
  159. queryParams['unitName'] = store.state.dictionary.deptMap.get(v).organizationName
  160. } else if (k === 'dutyDate') {
  161. queryParams['beginDutyTime'] = v[0]
  162. queryParams['endDutyTime'] = v[1]
  163. } else if (k === 'submitDate') {
  164. queryParams['beginTime'] = v[0]
  165. queryParams['endTime'] = v[1]
  166. } else {
  167. queryParams[k] = v
  168. }
  169. }
  170. }
  171. state.loading = true
  172. that.$api.getDailyReportList(queryParams).then((res: any) => {
  173. if (res.code === 200) {
  174. state.queryResult.tableData = res.rows
  175. state.queryResult.total = res.total
  176. } else {
  177. ElMessage.error(res.message)
  178. }
  179. state.loading = false
  180. }).catch(() => {
  181. state.loading = false
  182. })
  183. }
  184. // 点击查询按钮后
  185. const onSearch = () => {
  186. ref_cusTable.value.resetFilter()
  187. state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
  188. state.queryPage.pageNum = 1
  189. handleSearch()
  190. }
  191. const onAdd = () => {
  192. state.transfer = {
  193. method: 'add',
  194. }
  195. state.showDetail = true
  196. }
  197. const onEdit = (val) => {
  198. state.transfer = {
  199. method: 'edit',
  200. detail: val
  201. }
  202. state.showDetail = true
  203. }
  204. const onView = (val) => {
  205. state.transfer = {
  206. method: 'view',
  207. detail: val
  208. }
  209. state.showDetail = true
  210. }
  211. const onDel = (val) => {
  212. ElMessageBox.confirm(`是否删除${val.title}?`, "提示", {
  213. confirmButtonText: "确定",
  214. cancelButtonText: "取消",
  215. type: "warning",
  216. }).then(() => {
  217. state.loading = true
  218. that.$api.delDailyReportDelete({id: val.id}).then(res => {
  219. if (res.code === 200) {
  220. ElMessage.success(res.message)
  221. handleSearch()
  222. } else {
  223. ElMessage.error(res.message)
  224. state.loading = false
  225. }
  226. }).catch(() => {
  227. state.loading = false
  228. })
  229. }).catch(() => {})
  230. }
  231. onMounted(() => {
  232. state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
  233. initDictionary()
  234. handleSearch()
  235. })
  236. return {
  237. ref_cusTable,
  238. ...toRefs(state),
  239. handleSearch,
  240. handlePage,
  241. handleReset,
  242. onSearch,
  243. onAdd,
  244. onEdit,
  245. onView,
  246. onDel
  247. }
  248. },
  249. })
  250. </script>
  251. <style scoped lang="scss">
  252. </style>