index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <script>
  2. import { LIST } from "@/api/business/purchase/task";
  3. import { TableColumns, SearchColumns } from "./column";
  4. import { initParams, initDicts } from "@/utils/init.js";
  5. export default {
  6. name: "PuchaseTask",
  7. dicts: [...initDicts([...TableColumns, ...SearchColumns])],
  8. components: {
  9. // CloseModel: () => import("./close/index.vue"),
  10. DcButton: () => import("./dao-chu/index.vue"),
  11. MxButton: () => import("./ming-xi/index.vue"),
  12. ZpButton: () => import("./zhuan-pai/index.vue"),
  13. ThxqButton: () => import("./tui-hui-xu-qiu/index.vue"),
  14. XyzcButton: () => import("./xie-yi-zhi-cai/index.vue"),
  15. ElSuperTable: () => import("@/components/super-table/index.vue"),
  16. ElSuperSearch: () => import("@/components/super-search/index.vue"),
  17. },
  18. data() {
  19. return {
  20. size: "mini",
  21. loading: false,
  22. SearchColumns: SearchColumns,
  23. params: initParams(SearchColumns),
  24. tableData: [],
  25. selectData: [],
  26. TableColumns: TableColumns,
  27. page: { pageNum: 1, pageSize: 10, total: 0 },
  28. };
  29. },
  30. computed: {
  31. $dicts: {
  32. get: function () {
  33. return this.dict.type;
  34. },
  35. },
  36. },
  37. watch: {},
  38. created() {
  39. this.useQuery(this.params, this.page);
  40. },
  41. methods: {
  42. //
  43. setSelectable(row) {
  44. const { status } = row;
  45. if (status === "1") {
  46. // 已执行协议直采
  47. return false;
  48. } else {
  49. return true;
  50. }
  51. },
  52. //
  53. async fetchList(prop, page) {
  54. try {
  55. this.loading = true;
  56. const { code, rows, total } = await LIST(prop, page);
  57. if (code === 200) {
  58. this.tableData = rows;
  59. this.page.total = total;
  60. }
  61. } catch (err) {
  62. // catch
  63. } finally {
  64. // finally
  65. this.loading = false;
  66. }
  67. },
  68. // 查 询
  69. async useQuery(prop, page) {
  70. const { pageNum, pageSize } = page;
  71. const { date, documentsCodes: dCode, materialCodes: mCode } = prop;
  72. const [startDate, endDate] = date || [];
  73. const documentsCodes = dCode
  74. ? dCode.replace(/\s*/g, "").replaceAll(",", ",")
  75. : undefined;
  76. const materialCodes = Array.isArray(mCode)
  77. ? mCode
  78. : mCode
  79. ? mCode.replace(/\s*/g, "").replaceAll(",", ",").split(",")
  80. : undefined;
  81. await this.fetchList(
  82. {
  83. ...prop,
  84. endDate,
  85. startDate,
  86. materialCodes,
  87. documentsCodes,
  88. date: undefined,
  89. },
  90. { pageNum, pageSize, isAsc: "desc", orderByColumn: "updateTime" }
  91. );
  92. },
  93. // 重 置
  94. useReset() {
  95. this.page.pageNum = 1;
  96. this.page.pageSize = 10;
  97. this.params = initParams(SearchColumns);
  98. this.useQuery(this.params, this.page);
  99. },
  100. // 选 择
  101. useSelect(prop) {
  102. this.selectData = prop;
  103. },
  104. // 明 细
  105. async useSee(prop) {
  106. const { open } = this.$refs.mingxi;
  107. await open(prop);
  108. },
  109. // 导 出
  110. async useExport(prop, page) {
  111. const { open } = this.$refs.daochu;
  112. await open(prop, page);
  113. },
  114. },
  115. };
  116. </script>
  117. <template>
  118. <el-card v-loading="loading" :body-style="{ padding: 0 }">
  119. <el-super-search
  120. v-model="params"
  121. :size="size"
  122. :dict="dict"
  123. :columns="SearchColumns"
  124. @reset="useReset"
  125. @submit="useQuery(params, page)"
  126. ></el-super-search>
  127. <div style="padding: 0 20px; text-align: right">
  128. <el-button-group style="margin: 0 10px 0 0">
  129. <thxq-button
  130. :size="size"
  131. :select-data="selectData"
  132. @success="useQuery(params, page)"
  133. ></thxq-button>
  134. <xyzc-button
  135. :size="size"
  136. :select-data="selectData"
  137. @success="useQuery(params, page)"
  138. ></xyzc-button>
  139. </el-button-group>
  140. <el-button-group>
  141. <zp-button
  142. :size="size"
  143. :select-data="selectData"
  144. @success="useQuery(params, page)"
  145. >
  146. </zp-button>
  147. <mx-button
  148. v-show="false"
  149. :size="size"
  150. :select-data="selectData"
  151. ref="mingxi"
  152. @success="useQuery(params, page)"
  153. ></mx-button>
  154. <dc-button
  155. :size="size"
  156. :page="page"
  157. :data="params"
  158. @success="useQuery(params, page)"
  159. ></dc-button>
  160. </el-button-group>
  161. </div>
  162. <el-super-table
  163. v-model="tableData"
  164. :size="size"
  165. :dict="dict"
  166. :columns="TableColumns"
  167. @row-dblclick="useSee"
  168. @selection-change="useSelect"
  169. >
  170. <el-table-column
  171. fixed
  172. width="55"
  173. align="center"
  174. type="selection"
  175. :selectable="setSelectable"
  176. >
  177. </el-table-column>
  178. </el-super-table>
  179. <pagination
  180. :total="page.total"
  181. :page.sync="page.pageNum"
  182. :limit.sync="page.pageSize"
  183. @pagination="useQuery(params, page)"
  184. />
  185. </el-card>
  186. </template>
  187. <style scoped lang="scss">
  188. .el-card {
  189. width: calc(100% - 20px);
  190. height: 100%;
  191. margin: 10px;
  192. padding: 0 0 20px 0;
  193. }
  194. </style>