index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <script>
  2. import { dicts } from "./dicts";
  3. import useColumns from "./columns";
  4. import { LIST } from "@/api/business/purchase/contract";
  5. export default {
  6. name: "PuchaseContract",
  7. dicts: dicts,
  8. components: {
  9. ElAddForm: () => import("./add/index.vue"),
  10. ElEditForm: () => import("./edit/index.vue"),
  11. ElSeeForm: () => import("./see/index.vue"),
  12. ElDeleteButton: () => import("./delete/index.vue"),
  13. SubmButton: () => import("./submit/index.vue"),
  14. TermButton: () => import("./termination/index.vue"),
  15. PigeButton: () => import("./pigeonhole/index.vue"),
  16. ExportButton: () => import("./export/index.vue"),
  17. ElSuperTable: () => import("@/components/super-table/index.vue"),
  18. ElSuperSearch: () => import("@/components/super-search/index.vue"),
  19. },
  20. data() {
  21. const { TableColumns, SearchColumns } = useColumns();
  22. const params = this.$init.params(SearchColumns);
  23. return {
  24. size: "mini",
  25. loading: false,
  26. drawerVisible: false,
  27. components: { is: "", title: "" },
  28. params: params,
  29. tableData: [],
  30. selectData: [],
  31. TableColumns: TableColumns,
  32. SearchColumns: SearchColumns,
  33. page: { pageNum: 1, pageSize: 10, total: 0 },
  34. };
  35. },
  36. computed: {
  37. SeeDisabled: {
  38. get() {
  39. const { selectData } = this;
  40. if (selectData.length !== 1) {
  41. return true;
  42. }
  43. },
  44. set() {},
  45. },
  46. EditDisabled: {
  47. get() {
  48. const {
  49. selectData,
  50. selectData: [{ status } = {}],
  51. } = this;
  52. if (selectData.length !== 1) {
  53. return true;
  54. }
  55. if (selectData.length === 1 && status === "1") {
  56. return true;
  57. }
  58. },
  59. set() {},
  60. },
  61. },
  62. created() {
  63. this.useQuery(this.params, this.page);
  64. },
  65. methods: {
  66. setSelectable() {
  67. return true;
  68. },
  69. //
  70. async fetchList(prop, page) {
  71. try {
  72. // try
  73. this.loading = true;
  74. const { pageNum, pageSize } = page;
  75. const { code, rows, total } = await LIST({
  76. pageNum,
  77. pageSize,
  78. ...prop,
  79. });
  80. if (code === 200) {
  81. this.tableData = rows.map((item, index) => ({
  82. ...item,
  83. $index: (pageNum - 1) * pageSize + index + 1,
  84. }));
  85. this.page.total = total;
  86. }
  87. } catch (err) {
  88. // catch
  89. console.error(err);
  90. } finally {
  91. // finally
  92. this.loading = false;
  93. }
  94. },
  95. // 查 询
  96. useQuery(prop, page) {
  97. this.fetchList(prop, page);
  98. },
  99. // 重 置
  100. useReset() {
  101. this.page.pageNum = 1;
  102. this.page.pageSize = 10;
  103. this.params = this.$init.params(this.SearchColumns);
  104. this.$refs.superTable.clearSelection();
  105. this.useQuery(this.params, this.page);
  106. },
  107. // 选 择
  108. useSelect(prop) {
  109. this.selectData = prop;
  110. },
  111. // 明 细
  112. async useSee(prop) {
  113. const { id } = prop;
  114. this.drawerVisible = true;
  115. this.components.title = id ? `明细-${id}` : "明细";
  116. this.components.is = "ElSeeForm";
  117. },
  118. // 新 增
  119. useAdd() {
  120. this.drawerVisible = true;
  121. this.components.title = "新增";
  122. this.components.is = "ElAddForm";
  123. },
  124. // 期 初 补 录
  125. useReord() {
  126. this.drawerVisible = true;
  127. this.components.title = "期初补录";
  128. this.components.is = "ElAddForm";
  129. },
  130. // 编 辑
  131. useEdit() {
  132. this.drawerVisible = true;
  133. this.components.title = "编 辑";
  134. this.components.is = "ElEditForm";
  135. },
  136. // 删 除
  137. useDelete() {
  138. this.useQuery(this.params, this.page);
  139. this.$refs.superTable.clearSelection();
  140. },
  141. },
  142. };
  143. </script>
  144. <template>
  145. <el-card
  146. v-loading="loading"
  147. :body-style="{
  148. height: '100%',
  149. padding: 0,
  150. display: 'flex',
  151. 'flex-direction': 'column',
  152. }"
  153. >
  154. <el-super-search
  155. v-model="params"
  156. :size="size"
  157. :dict="dict"
  158. :columns="SearchColumns"
  159. @reset="useReset"
  160. @submit="useQuery(params, page)"
  161. ></el-super-search>
  162. <el-drawer
  163. size="100%"
  164. title="title"
  165. :show-close="false"
  166. :with-header="false"
  167. :visible.sync="drawerVisible"
  168. append-to-body
  169. destroy-on-close
  170. >
  171. <components
  172. :size="size"
  173. :dict="dict"
  174. :is="components.is"
  175. :title="components.title"
  176. :select-data="selectData"
  177. @close="drawerVisible = false"
  178. @submit-success="useQuery(params, page)"
  179. ></components>
  180. </el-drawer>
  181. <div style="margin: 18px 0; text-align: right">
  182. <el-button-group>
  183. <el-button :size="size" :disabled="SeeDisabled" @click="useSee">
  184. 明细
  185. </el-button>
  186. </el-button-group>
  187. <el-button-group>
  188. <el-button :size="size" @click="useAdd">新增</el-button>
  189. <el-button :size="size" @click="useReord">期初补录</el-button>
  190. </el-button-group>
  191. <el-button-group>
  192. <el-button :size="size" :disabled="EditDisabled" @click="useEdit">
  193. 编辑
  194. </el-button>
  195. <el-delete-button
  196. :size="size"
  197. :select-data="selectData"
  198. @submit-success="useDelete"
  199. ></el-delete-button>
  200. </el-button-group>
  201. <el-button-group>
  202. <subm-button
  203. :size="size"
  204. :select-data="selectData"
  205. @success="useQuery(params, page)"
  206. ></subm-button>
  207. <term-button
  208. :size="size"
  209. :select-data="selectData"
  210. @success="useQuery(params, page)"
  211. ></term-button>
  212. <pige-button
  213. :size="size"
  214. :select-data="selectData"
  215. :isCancal="false"
  216. @success="useReset"
  217. ></pige-button>
  218. <pige-button
  219. :size="size"
  220. :select-data="selectData"
  221. :isCancal="true"
  222. @success="useReset"
  223. ></pige-button>
  224. </el-button-group>
  225. <!-- <el-button-group>
  226. <export-button
  227. :size="size"
  228. :page="page"
  229. :data="params"
  230. @success="useQuery(params, page)"
  231. ></export-button>
  232. </el-button-group> -->
  233. </div>
  234. <el-super-table
  235. v-model="tableData"
  236. ref="superTable"
  237. :size="size"
  238. :dict="dict"
  239. :page="page"
  240. :columns="TableColumns"
  241. :selectable="setSelectable"
  242. index
  243. checkbox
  244. pagination
  245. convenitentOperation
  246. storage-key="PuchaseContractSuperTable1"
  247. @row-dblclick="useSee"
  248. @selection-change="useSelect"
  249. @pagination="useQuery(params, page)"
  250. >
  251. </el-super-table>
  252. </el-card>
  253. </template>
  254. <style scoped lang="scss">
  255. .el-card {
  256. width: calc(100% - 32px);
  257. height: calc(100vh - 32px);
  258. margin: 16px;
  259. padding: 16px;
  260. border-radius: 8px;
  261. }
  262. .el-button-group + .el-button-group {
  263. margin: 0 0 0 8px;
  264. }
  265. </style>