index.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <script>
  2. import { FormColumns, SearchColumns } from "./column";
  3. import { LIST } from "@/api/business/purchase/contract";
  4. import { initPage, initDicts, initParams } from "@/utils/init/index.js";
  5. export default {
  6. name: "PuchaseContract",
  7. dicts: [...initDicts(SearchColumns), ...initDicts(FormColumns)],
  8. components: {
  9. AddModel: () => import("./add/index.vue"),
  10. SeeModel: () => import("./see/index.vue"),
  11. EditModel: () => import("./edit/index.vue"),
  12. ExportModel: () => import("./export/index.vue"),
  13. ImportModel: () => import("./import/index.vue"),
  14. RecordModel: () => import("./record/index.vue"),
  15. DeleteModel: () => import("./delete/index.vue"),
  16. TerminationModel: () => import("./termination/index.vue"),
  17. PigeonholeModel: () => import("./pigeonhole/index.vue"),
  18. AlterationModel: () => import("./alteration/index.vue"),
  19. SubmitModel: () => import("./submit/index.vue"),
  20. },
  21. data() {
  22. return {
  23. size: "mini",
  24. loading: false,
  25. searchColumns: SearchColumns,
  26. params: initParams(SearchColumns),
  27. tableData: [],
  28. selectData: [],
  29. tableColumns: FormColumns,
  30. page: { pageNum: 1, pageSize: 10, total: 0 },
  31. };
  32. },
  33. computed: {},
  34. created() {
  35. this.useQuery(this.params, this.page);
  36. },
  37. methods: {
  38. //
  39. async fetchList(prop, page) {
  40. try {
  41. // try
  42. this.loading = true;
  43. const { pageNum, pageSize } = page;
  44. const { code, rows, total } = await LIST({
  45. pageNum,
  46. pageSize,
  47. ...prop,
  48. });
  49. if (code === 200) {
  50. this.tableData = rows;
  51. this.page.total = total;
  52. }
  53. } catch (err) {
  54. // catch
  55. console.error(err);
  56. } finally {
  57. // finally
  58. this.loading = false;
  59. }
  60. },
  61. // 查 询
  62. useQuery(prop, page) {
  63. this.selectData = [];
  64. this.fetchList(prop, page);
  65. },
  66. // 重 置
  67. useReset() {
  68. this.page = initPage();
  69. this.params = initParams(SearchColumns);
  70. this.useQuery(this.params, this.page);
  71. },
  72. // 选 择
  73. useSelect(prop) {
  74. this.selectData = prop;
  75. },
  76. // 新 增
  77. async useAdd() {
  78. const { open } = this.$refs.AddModel;
  79. await open();
  80. },
  81. // 删 除
  82. async useDelete(prop) {
  83. const [{ id }] = prop;
  84. const { open } = this.$refs.DeleteModel;
  85. await open(id);
  86. },
  87. hasPowerDelete(prop) {
  88. if (prop.length === 1) {
  89. return true;
  90. const [{ status }] = prop;
  91. if (status === "0") return true;
  92. else if (status === "3") return true;
  93. else if (!status) return true;
  94. else return false;
  95. }
  96. },
  97. // 编 辑
  98. async useEdit(prop) {
  99. const [{ id }] = prop;
  100. const { open } = this.$refs.EditModel;
  101. await open(id);
  102. },
  103. hasPowerEdit(prop) {
  104. if (prop.length === 1) {
  105. const [{ status }] = prop;
  106. if (status !== "2") return true;
  107. else return false;
  108. }
  109. },
  110. // 明 细
  111. async useSee(prop) {
  112. const { id } = prop;
  113. const { open } = this.$refs.SeeModel;
  114. await open(id);
  115. },
  116. // 终 止
  117. async useTermination(prop) {
  118. const [{ id }] = prop;
  119. const { open } = this.$refs.TerminationModel;
  120. await open(id);
  121. },
  122. hasPowerTermination(prop) {
  123. if (prop.length === 1) {
  124. const [{ status }] = prop;
  125. if (status === "2") return true;
  126. else return false;
  127. }
  128. },
  129. // 归 档
  130. async usePigeonhole(prop) {
  131. const [{ id }] = prop;
  132. const { open } = this.$refs.PigeonholeModel;
  133. await open(id);
  134. },
  135. hasPowerPigeonhole(prop) {
  136. if (prop.length === 1) {
  137. const [{ pigeonhole }] = prop;
  138. if (pigeonhole !== "Y") return true;
  139. else return false;
  140. }
  141. },
  142. // 变 更
  143. async useAlteration(prop) {
  144. const { open } = this.$refs.AlterationModel;
  145. await open(prop[0]);
  146. },
  147. hasPowerAlteration(prop) {
  148. if (prop.length === 1) {
  149. const [{ status }] = prop;
  150. if (status === "2") return true;
  151. else return false;
  152. }
  153. },
  154. // 导 出
  155. async useExport(prop, page) {
  156. const { pageNum, pageSize } = page;
  157. const { open } = this.$refs.ExportModel;
  158. await open({ ...prop, pageNum, pageSize });
  159. },
  160. // 导 入
  161. async useImport() {
  162. const { open } = this.$refs.ImportModel;
  163. await open();
  164. },
  165. // 期初补录
  166. async useRecord() {
  167. const { open } = this.$refs.RecordModel;
  168. await open();
  169. },
  170. // 提交OA
  171. async useSubmit(prop) {
  172. const [{ id }] = prop;
  173. const { open } = this.$refs.SubmitModel;
  174. await open(id);
  175. },
  176. hasPowerSubmit(prop) {
  177. if (prop.length === 1) {
  178. return true;
  179. } else {
  180. return false;
  181. }
  182. },
  183. },
  184. };
  185. </script>
  186. <template>
  187. <el-card
  188. v-loading="loading"
  189. style="
  190. width: calc(100% - 20px);
  191. height: 100%;
  192. margin: 10px;
  193. padding: 0 20px 20px 0;
  194. "
  195. :body-style="{ padding: 0 }"
  196. >
  197. <see-model ref="SeeModel"></see-model>
  198. <add-model ref="AddModel" @success="useReset"></add-model>
  199. <record-model ref="RecordModel" @success="useReset"></record-model>
  200. <edit-model ref="EditModel" @success="useQuery(params, page)"></edit-model>
  201. <export-model ref="ExportModel"></export-model>
  202. <import-model ref="ImportModel"></import-model>
  203. <submit-model
  204. ref="SubmitModel"
  205. @success="useQuery(params, page)"
  206. ></submit-model>
  207. <delete-model
  208. ref="DeleteModel"
  209. @success="useQuery(params, page)"
  210. ></delete-model>
  211. <termination-model
  212. ref="TerminationModel"
  213. @success="useQuery(params, page)"
  214. ></termination-model>
  215. <pigeonhole-model
  216. ref="PigeonholeModel"
  217. @success="useQuery(params, page)"
  218. ></pigeonhole-model>
  219. <alteration-model
  220. ref="AlterationModel"
  221. @success="useQuery(params, page)"
  222. ></alteration-model>
  223. <el-form
  224. :size="size"
  225. :model="params"
  226. label-width="auto"
  227. label-position="right"
  228. style="padding: 20px 20px 0"
  229. @submit.native.prevent
  230. >
  231. <el-row :gutter="20" style="display: flex; flex-wrap: wrap">
  232. <el-col
  233. v-for="column in searchColumns"
  234. :key="column.title"
  235. :span="column.span || 6"
  236. >
  237. <el-form-item :prop="column.key" :label="column.title">
  238. <el-input
  239. v-if="column.inputType === 'Input'"
  240. v-model="params[column.key]"
  241. :placeholder="column.placeholder"
  242. @keyup.enter.native="useQuery(params, page)"
  243. ></el-input>
  244. <el-select
  245. v-if="column.inputType === 'Select'"
  246. v-model="params[column.key]"
  247. :disabled="column.disabled"
  248. :clearable="column.clearable"
  249. :placeholder="column.placeholder"
  250. style="width: 100%"
  251. @change="useQuery(params, page)"
  252. @keyup.enter.native="useQuery(params, page)"
  253. >
  254. <el-option
  255. v-for="item in dict.type[column.referName]"
  256. :key="item.value"
  257. :label="item.label"
  258. :value="item.value"
  259. >
  260. </el-option>
  261. </el-select>
  262. </el-form-item>
  263. </el-col>
  264. </el-row>
  265. </el-form>
  266. <el-row style="padding: 0 20px">
  267. <el-button :size="size" @click="useQuery(params, page)">
  268. 查 询
  269. </el-button>
  270. <el-button :size="size" @click="useReset"> 重 置 </el-button>
  271. <el-button :size="size" @click="useAdd"> 新 增 </el-button>
  272. <el-button :size="size" @click="useRecord"> 期初补录 </el-button>
  273. <el-button :size="size" @click="useExport(params, page)">
  274. 导 出
  275. </el-button>
  276. <el-button
  277. :size="size"
  278. v-show="hasPowerSubmit(selectData)"
  279. @click="useSubmit(selectData)"
  280. >
  281. 提交OA
  282. </el-button>
  283. <el-button
  284. v-show="hasPowerDelete(selectData)"
  285. :size="size"
  286. @click="useDelete(selectData)"
  287. >
  288. 删 除
  289. </el-button>
  290. <el-button
  291. v-show="hasPowerTermination(selectData)"
  292. :size="size"
  293. @click="useTermination(selectData)"
  294. >
  295. 终 止
  296. </el-button>
  297. <el-button
  298. v-show="hasPowerPigeonhole(selectData)"
  299. :size="size"
  300. @click="usePigeonhole(selectData)"
  301. >
  302. 归 档
  303. </el-button>
  304. <!-- <el-button :size="size" @click="useImport"> 导 入 </el-button> -->
  305. </el-row>
  306. <el-table
  307. :size="size"
  308. :data="tableData"
  309. highlight-current-row
  310. @row-dblclick="useSee"
  311. @selection-change="useSelect"
  312. @row-click="useSelect([$event])"
  313. style="width: 100%; margin: 20px 0 0 0"
  314. >
  315. <el-table-column fixed width="55" align="center" type="selection">
  316. </el-table-column>
  317. <el-table-column
  318. v-for="(column, index) in tableColumns"
  319. :key="index"
  320. :prop="column.key"
  321. :label="column.title"
  322. :width="column.width || 200"
  323. show-overflow-tooltip
  324. >
  325. <template slot-scope="scope">
  326. <dict-tag
  327. v-if="column.inputType === 'Select'"
  328. :size="size"
  329. :value="scope.row[column.key]"
  330. :options="dict.type[column.referName]"
  331. />
  332. <dr-file-preview
  333. v-else-if="column.inputType === 'Upload' && scope.row[column.key]"
  334. v-model="scope.row[column.key]"
  335. ></dr-file-preview>
  336. <span v-else>{{ scope.row[column.key] }}</span>
  337. </template>
  338. </el-table-column>
  339. </el-table>
  340. <pagination
  341. :total="page.total"
  342. :page.sync="page.pageNum"
  343. :limit.sync="page.pageSize"
  344. @pagination="useQuery(params, page)"
  345. />
  346. </el-card>
  347. </template>