index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <script>
  2. import { taskList } from "@/api/business/purchase/purchase-task";
  3. // import AddPurchaseTaskDrawer from "./add-purchase-task.vue";
  4. // import SeePurchaseTaskDrawer from "./see-purchase-task.vue";
  5. // import DirectSourcingTable from "./direct-sourcing.vue";
  6. export default {
  7. name: "PuchaseTask",
  8. components: {
  9. // AddPurchaseTaskDrawer,
  10. // SeePurchaseTaskDrawer,
  11. // DirectSourcingTable,
  12. },
  13. data() {
  14. const arr2Obj = function (data, keyName, valueName) {
  15. return Object.fromEntries(
  16. data.map((item) => [item[keyName], item[valueName]])
  17. );
  18. };
  19. const searchColumns = [
  20. { title: "采购组织", key: "", type: "TagSelect" },
  21. { title: "客户", key: "", type: "TagSelect" },
  22. { title: "价格来源", key: "material", type: "Select" },
  23. { title: "主无税单价", key: "materialDesc", type: "Input" },
  24. { title: "生产厂商", key: "", type: "Input" },
  25. { title: "供应商", key: "", type: "TagSelect" },
  26. { title: "采购员", key: "", type: "TagSelect" },
  27. { title: "价格日期区间", key: "", type: "DatePicker" },
  28. { title: "物料", key: "", type: "TagSelect" },
  29. { title: "换算率", key: "", type: "Input" },
  30. ];
  31. const initSearchColumns = () => searchColumns;
  32. const initSearchParams = () => arr2Obj(initSearchColumns(), "key", "value");
  33. const tableColumns = [
  34. {
  35. title: "效期预警",
  36. key: "materialName",
  37. },
  38. {
  39. title: "采购组织",
  40. key: "materialName",
  41. },
  42. {
  43. title: "物料编码",
  44. key: "materialName",
  45. },
  46. {
  47. title: "物料一级分类",
  48. key: "materialName",
  49. },
  50. {
  51. title: "生产厂家",
  52. key: "materialName",
  53. },
  54. {
  55. title: "物料名称",
  56. key: "materialName",
  57. },
  58. {
  59. title: "物料型号",
  60. key: "materialName",
  61. },
  62. {
  63. title: "物料规格",
  64. key: "materialName",
  65. },
  66. {
  67. title: "供应商",
  68. key: "materialName",
  69. },
  70. {
  71. title: "客户",
  72. key: "materialName",
  73. },
  74. {
  75. title: "主含税单价",
  76. key: "materialName",
  77. },
  78. {
  79. title: "主单位",
  80. key: "materialName",
  81. },
  82. {
  83. title: "价格生效日期",
  84. key: "materialName",
  85. },
  86. {
  87. title: "价格失效日期",
  88. key: "materialName",
  89. },
  90. {
  91. title: "采购员",
  92. key: "materialName",
  93. },
  94. {
  95. title: "来源单据号",
  96. key: "materialName",
  97. },
  98. {
  99. title: "有效状态",
  100. key: "materialName",
  101. },
  102. {
  103. title: "启用状态",
  104. key: "materialName",
  105. },
  106. {
  107. title: "换算率",
  108. key: "materialName",
  109. },
  110. {
  111. title: "创建时间",
  112. key: "materialName",
  113. },
  114. {
  115. title: "物料启用状态",
  116. key: "materialName",
  117. },
  118. {
  119. title: "采购需求单号",
  120. key: "materialName",
  121. },
  122. {
  123. title: "含税/无税优先",
  124. key: "materialName",
  125. },
  126. {
  127. title: "最新操作人名称",
  128. key: "materialName",
  129. },
  130. {
  131. title: "最新操作时间",
  132. key: "materialName",
  133. },
  134. {
  135. title: "操作类型",
  136. key: "materialName",
  137. },
  138. ];
  139. const initTableColumns = () => tableColumns;
  140. const initTableData = () => {
  141. const data = [];
  142. for (let index = 0; index < 50; index++) {
  143. data.push({ materialName: index });
  144. }
  145. return data;
  146. };
  147. return {
  148. loading: false,
  149. isSimpleSearch: true,
  150. searchColumns: initSearchColumns(),
  151. searchParams: {
  152. isAsc: "desc",
  153. reasonable: "",
  154. orderByColumn: "",
  155. ...initSearchParams(),
  156. },
  157. tableColumns: initTableColumns(),
  158. tableData: initTableData(),
  159. page: { pageNum: 1, pageSize: 25 },
  160. total: 0,
  161. pageSizes: [25, 50, 100],
  162. };
  163. },
  164. computed: {
  165. showSearchColumns() {
  166. return this.isSimpleSearch
  167. ? this.searchColumns.slice(0, 4)
  168. : this.searchColumns;
  169. },
  170. },
  171. // watch: {
  172. // $route: {
  173. // handler: function (route) {
  174. // this.redirect = route.query && route.query.redirect;
  175. // },
  176. // immediate: true,
  177. // },
  178. // },
  179. created() {
  180. // this.fetchTaskList();
  181. console.log(this.tableData);
  182. },
  183. methods: {
  184. async fetchTaskList() {
  185. this.loading = true;
  186. try {
  187. const { code, msg, rows, total } = await taskList({
  188. ...this.page,
  189. ...this.searchParams,
  190. });
  191. if (code === 200) {
  192. this.total = total;
  193. this.tableData = rows;
  194. this.$notify.success({ title: msg });
  195. } else {
  196. this.$notify.warning({ title: msg });
  197. }
  198. } catch (err) {
  199. this.$notify.error({ title: "error", message: err });
  200. } finally {
  201. this.loading = false;
  202. }
  203. },
  204. handleSearchChange() {
  205. this.isSimpleSearch = !this.isSimpleSearch;
  206. this.$notify.info({
  207. title: this.isSimpleSearch ? "Simple Search" : "All Search",
  208. });
  209. },
  210. handleSizeChange() {},
  211. handleCurrentChange() {},
  212. handleOpenAddDrawer() {
  213. const { setVisible } = this.$refs.addDrawerFef;
  214. setVisible(true);
  215. setTimeout(() => {
  216. this.$notify.info("Open Add Drawer");
  217. }, 250);
  218. },
  219. handleOpenSeeDrawer() {
  220. const { setVisible } = this.$refs.seeDrawerFef;
  221. setVisible(true);
  222. setTimeout(() => {
  223. this.$notify.info("Open See Drawer");
  224. }, 250);
  225. },
  226. },
  227. };
  228. </script>
  229. <template>
  230. <el-card
  231. v-loading="loading"
  232. style="width: calc(100% - 24px); height: 100%; margin: 10px"
  233. :body-style="{ padding: 0 }"
  234. >
  235. <!-- <AddPurchaseTaskDrawer ref="addDrawerFef"></AddPurchaseTaskDrawer> -->
  236. <!-- <SeePurchaseTaskDrawer ref="seeDrawerFef"></SeePurchaseTaskDrawer> -->
  237. <el-form
  238. size="mini"
  239. label-position="right"
  240. label-width="100px"
  241. :model="searchParams"
  242. style="padding: 20px 0 0 0"
  243. >
  244. <el-row :gutter="24">
  245. <el-col :span="22">
  246. <el-row :gutter="20">
  247. <el-col
  248. v-for="column in showSearchColumns"
  249. :key="column.title"
  250. :xl="6"
  251. :lg="6"
  252. :md="8"
  253. :sm="12"
  254. :xs="24"
  255. >
  256. <el-form-item :prop="column.key" :label="column.title">
  257. <el-input
  258. v-model="searchParams[column.key]"
  259. :placeholder="column.placeholder"
  260. ></el-input>
  261. </el-form-item>
  262. </el-col>
  263. </el-row>
  264. </el-col>
  265. <el-col :span="2">
  266. <el-row :gutter="24">
  267. <el-col :span="24">
  268. <el-button type="primary" size="mini">搜索</el-button>
  269. </el-col>
  270. <el-col
  271. v-show="!isSimpleSearch"
  272. :span="24"
  273. style="margin: 10px 0 0"
  274. >
  275. <el-button size="mini">重置</el-button>
  276. </el-col>
  277. </el-row>
  278. </el-col>
  279. </el-row>
  280. </el-form>
  281. <el-divider>
  282. <i
  283. :class="isSimpleSearch ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
  284. style="cursor: pointer"
  285. @click="handleSearchChange"
  286. ></i>
  287. </el-divider>
  288. <!-- <el-row :gutter="24" style="padding: 0 20px">
  289. <el-col :span="6">123</el-col>
  290. <el-col :span="18" style="text-align: right">
  291. <el-button
  292. size="mini"
  293. type="danger"
  294. style="margin: 0 10px 0 0"
  295. @click="handleOpenAddDrawer"
  296. >
  297. 新增
  298. </el-button>
  299. <el-dropdown placement="bottom-start">
  300. <el-button size="mini" style="margin: 0 10px 0 0">
  301. 发布
  302. <i class="el-icon-arrow-down el-icon--right"></i>
  303. </el-button>
  304. <el-dropdown-menu slot="dropdown">
  305. <el-dropdown-item>发布寻源</el-dropdown-item>
  306. <el-dropdown-item>发布委托</el-dropdown-item>
  307. <el-dropdown-item>采购方案</el-dropdown-item>
  308. </el-dropdown-menu>
  309. </el-dropdown>
  310. <el-dropdown placement="bottom-start">
  311. <el-button
  312. size="mini"
  313. style="border-right: 0; border-radius: 3px 0 0 3px"
  314. >
  315. 首次协议直采
  316. <i class="el-icon-arrow-down el-icon--right"></i>
  317. </el-button>
  318. <el-dropdown-menu slot="dropdown">
  319. <el-dropdown-item>首次协议直采</el-dropdown-item>
  320. <el-dropdown-item>余量协议直采</el-dropdown-item>
  321. </el-dropdown-menu>
  322. </el-dropdown>
  323. <el-dropdown placement="bottom-start">
  324. <el-button size="mini" style="border-right: 0; border-radius: 0">
  325. 跟单采购
  326. <i class="el-icon-arrow-down el-icon--right"></i>
  327. </el-button>
  328. <el-dropdown-menu slot="dropdown">
  329. <el-dropdown-item>按合同(普通)取价</el-dropdown-item>
  330. </el-dropdown-menu>
  331. </el-dropdown>
  332. <el-button size="mini" style="border-right: 0; border-radius: 0">
  333. Excel导出
  334. </el-button>
  335. <el-button
  336. size="mini"
  337. style="margin: 0; border-right: 0; border-radius: 0"
  338. >
  339. 退回请购
  340. </el-button>
  341. <el-dropdown placement="bottom-start">
  342. <el-button size="mini" style="border-right: 0; border-radius: 0">
  343. 清单采购
  344. <i class="el-icon-arrow-down el-icon--right"></i>
  345. </el-button>
  346. <el-dropdown-menu slot="dropdown">
  347. <el-dropdown-item>商超匹配下单</el-dropdown-item>
  348. </el-dropdown-menu>
  349. </el-dropdown>
  350. <el-button
  351. size="mini"
  352. disabled
  353. style="margin: 0 10px 0 0; border-radius: 0 3px 3px 0"
  354. >
  355. 一键合同下单
  356. </el-button>
  357. <el-button size="mini" style="margin: 0 10px 0 0">删除</el-button>
  358. <el-dropdown placement="bottom-end">
  359. <el-button size="mini">
  360. 更多
  361. <i class="el-icon-arrow-down el-icon--right"></i>
  362. </el-button>
  363. <el-dropdown-menu slot="dropdown">
  364. <el-dropdown-item>抢单</el-dropdown-item>
  365. <el-dropdown-item>批量修改收货组织</el-dropdown-item>
  366. <el-dropdown-item>批量退回</el-dropdown-item>
  367. <el-dropdown-item>退回需求申请</el-dropdown-item>
  368. <el-dropdown-item>刷新缓存</el-dropdown-item>
  369. </el-dropdown-menu>
  370. </el-dropdown>
  371. </el-col>
  372. </el-row> -->
  373. <el-table
  374. @row-dblclick="handleOpenSeeDrawer"
  375. :data="tableData"
  376. size="mini"
  377. style="width: 100%; margin: 20px 0 0 0"
  378. >
  379. <el-table-column
  380. v-for="(column, index) in tableColumns"
  381. :key="index"
  382. :prop="column.key"
  383. :label="column.title"
  384. :width="column.width || 180"
  385. :show-overflow-tooltip="column.showOverflowTooltip || true"
  386. >
  387. </el-table-column>
  388. </el-table>
  389. <el-pagination
  390. @size-change="handleSizeChange"
  391. @current-change="handleCurrentChange"
  392. :total="total"
  393. :page-sizes="pageSizes"
  394. :page-size="page.pageSize"
  395. :current-page="page.pageNum"
  396. hide-on-single-page
  397. layout="total, prev, pager, next, sizes, jumper"
  398. >
  399. </el-pagination>
  400. <!-- <DirectSourcingTable></DirectSourcingTable> -->
  401. </el-card>
  402. </template>