index.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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.shipId"/>
  14. <CusFormColumn
  15. label="发布单位:"
  16. v-model:param="queryForm.shipId"/>
  17. <CusFormColumn
  18. label="发布人:"
  19. v-model:param="queryForm.shipId"/>
  20. <CusFormColumn
  21. label="发布时间:"
  22. link="datetime"
  23. type="datetimerange"
  24. v-model:param="queryForm.shipId"/>
  25. <CusFormColumn
  26. label="类型:"
  27. link="select"
  28. static
  29. v-model:param="queryForm.shipId"
  30. labelKey="label"
  31. valueKey="value"
  32. :options="[
  33. {label: '类型一', value: '1'},
  34. {label: '类型二', value: '2'},
  35. {label: '类型三', value: '3'},
  36. ]"/>
  37. <CusFormColumn
  38. label="状态:"
  39. link="select"
  40. static
  41. v-model:param="queryForm.shipId"
  42. labelKey="label"
  43. valueKey="value"
  44. :options="[
  45. {label: '类型一', value: '1'},
  46. {label: '类型二', value: '2'},
  47. {label: '类型三', value: '3'},
  48. ]"/>
  49. <CusSearchButtons
  50. @handleReset="handleReset"
  51. @handleSearch="onSearch"
  52. />
  53. </CusForm>
  54. </template>
  55. <template #buttons>
  56. <div class="__cus-button_submit __hover" @click="onAdd">
  57. <SvgIcon name="add" size="16"/>新增
  58. </div>
  59. </template>
  60. <template #table>
  61. <CusTable
  62. v-loading="loading"
  63. ref="ref_cusTable"
  64. :tableData="queryResult.tableData"
  65. :tableHead="tableHead"
  66. :total="queryResult.total"
  67. :page="queryPage.pageNum"
  68. :pageSize="queryPage.pageSize"
  69. @handlePage="handlePage"
  70. @handleSort="handleSort"
  71. >
  72. <template #do-column-value="{ scope }">
  73. <div class="__cus-table_do">
  74. <div class="__cus-table_do-green __hover" @click="onView(scope.row)">
  75. <SvgIcon name="add" size="16"/>查看
  76. </div>
  77. <div class="__cus-table_do-blue __hover" @click="onEdit(scope.row)">
  78. <SvgIcon name="edit" size="16"/>编辑
  79. </div>
  80. <!-- <div class="__cus-table_do-green __hover">-->
  81. <!-- <SvgIcon name="publish" size="16"/>发布-->
  82. <!-- </div>-->
  83. <div class="__cus-table_do-red __hover">
  84. <SvgIcon name="del" size="16"/>删除
  85. </div>
  86. </div>
  87. </template>
  88. </CusTable>
  89. </template>
  90. </CusContent>
  91. </div>
  92. <DetailCom v-model:show="showDetail" :transfer="transfer"/>
  93. </div>
  94. </template>
  95. <script lang="ts">
  96. import {
  97. defineComponent,
  98. computed,
  99. onMounted,
  100. ref,
  101. reactive,
  102. watch,
  103. getCurrentInstance,
  104. ComponentInternalInstance,
  105. toRefs,
  106. nextTick
  107. } from 'vue'
  108. import {useStore} from 'vuex'
  109. import {useRouter, useRoute} from 'vue-router'
  110. import DetailCom from './detail.vue'
  111. export default defineComponent({
  112. name: '',
  113. components: {
  114. DetailCom
  115. },
  116. setup(props, {emit}) {
  117. const store = useStore();
  118. const router = useRouter();
  119. const route = useRoute();
  120. const that = (getCurrentInstance() as ComponentInternalInstance).appContext.config.globalProperties
  121. const state = reactive({
  122. // 加载中
  123. loading: false,
  124. // 查询分页参数
  125. queryPage: {
  126. pageNum: 1,
  127. pageSize: 10
  128. },
  129. // 查询结果
  130. queryResult: {
  131. total: 0,
  132. tableData: []
  133. },
  134. // 查询表单参数
  135. queryForm: <any>{},
  136. // 查询表单参数备份
  137. back_queryForm: {},
  138. // 查询表格排序
  139. querySort: {},
  140. // 表格表头
  141. tableHead: [
  142. {value: "p1", label: "标题", show: true},
  143. {value: "p1", label: "发布单位", show: true},
  144. {value: "p1", label: "发布人", show: true},
  145. {value: "p1", label: "发布时间", show: true},
  146. {value: "p1", label: "类型", show: true},
  147. {value: "p1", label: "状态", show: true},
  148. {value: "do", label: "操作", show: true, width: 260},
  149. ],
  150. showDetail: false,
  151. transfer: {}
  152. });
  153. const ref_cusTable = ref()
  154. // 获取字典
  155. const initDictionary = () => {
  156. }
  157. // 查询分页参数改变处理方法
  158. const handlePage = ({page, pageSize}: any) => {
  159. state.queryPage.pageNum = page
  160. state.queryPage.pageSize = pageSize
  161. handleSearch(page, pageSize)
  162. }
  163. // 查询排序参数改变处理方法
  164. const handleSort = ({key, value}: any) => {
  165. state.querySort = key ? {key: value} : {}
  166. handleSearch()
  167. }
  168. // 重置查询表单方法
  169. const handleReset = () => {
  170. state.queryForm = {}
  171. state.back_queryForm = state.queryForm
  172. handleSearch()
  173. }
  174. // 查询方法
  175. const handleSearch = (page = 1, pageSize = 10) => {
  176. // 添加分页参数
  177. const queryParams: any = {
  178. pageNum: page,
  179. pageSize: pageSize,
  180. sort: {},
  181. text: ''
  182. }
  183. // 添加排序参数
  184. for (const [k, v] of Object.entries(state.querySort)) {
  185. that.$util.isValue(v) ? (queryParams.sort[k] = v) : null;
  186. }
  187. // 添加表单参数
  188. for (const [k, v] of Object.entries(state.back_queryForm)) {
  189. that.$util.isValue(v) ? (queryParams[k] = v) : null;
  190. }
  191. // 添加复合查询参数
  192. state.loading = true
  193. // mock
  194. const arr: any = []
  195. for (let i = 0; i < 77; i++) {
  196. arr.push({
  197. p1: '阿三顶顶顶顶顶顶顶顶顶顶顶顶顶' + i,
  198. fileList: [
  199. { "url": "http://8.140.240.182:18085/profile/upload/2023/10/23/6b7bf3b4-592a-4e2f-ba92-11923671ce3b.doc", "name": "迁移案例.doc"},
  200. ],
  201. })
  202. }
  203. state.queryResult.tableData = arr
  204. state.queryResult.total = arr.length
  205. state.loading = false
  206. // that.$api.patrolBoatList(that.$util.formatGetParam(queryParams)).then((res: { code: number; rows: never[]; total: number; }) => {
  207. // if (res.code === 200) {
  208. // state.queryResult.tableData = res.rows
  209. // state.queryResult.total = res.total
  210. // }
  211. // setTimeout(() => {
  212. // state.loading = false
  213. // }, 1000)
  214. // }).catch(() => {
  215. // setTimeout(() => {
  216. // state.loading = false
  217. // }, 1000)
  218. // })
  219. }
  220. // 点击查询按钮后
  221. const onSearch = () => {
  222. ref_cusTable.value.resetFilter()
  223. state.back_queryForm = state.queryForm
  224. state.queryPage.pageNum = 1
  225. handleSearch()
  226. }
  227. const onAdd = () => {
  228. state.transfer = {
  229. method: 'add',
  230. }
  231. state.showDetail = true
  232. }
  233. const onEdit = (val) => {
  234. state.transfer = {
  235. method: 'edit',
  236. detail: val
  237. }
  238. state.showDetail = true
  239. }
  240. const onView = (val) => {
  241. state.transfer = {
  242. method: 'view',
  243. detail: val
  244. }
  245. state.showDetail = true
  246. }
  247. onMounted(() => {
  248. state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
  249. initDictionary()
  250. handleSearch()
  251. })
  252. return {
  253. ref_cusTable,
  254. ...toRefs(state),
  255. handleSearch,
  256. handlePage,
  257. handleSort,
  258. handleReset,
  259. onSearch,
  260. onAdd,
  261. onEdit,
  262. onView,
  263. }
  264. },
  265. })
  266. </script>
  267. <style scoped lang="scss">
  268. </style>