index.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <div class="filter-container">
  5. <el-form
  6. label-width="100px"
  7. class="ele-form-search"
  8. @keyup.enter.native="reload"
  9. @submit.native.prevent
  10. >
  11. <el-row :gutter="15">
  12. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  13. <el-form-item label="订单编号:" prop="orderNo">
  14. <el-input v-model="params.orderNo" clearable></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  18. <el-form-item label="项目名称:" prop="projectName">
  19. <el-input v-model="params.projectName" clearable></el-input>
  20. </el-form-item>
  21. </el-col>
  22. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  23. <el-form-item label="客户名称:" prop="customerName">
  24. <el-input v-model="params.customerName" clearable></el-input>
  25. </el-form-item>
  26. </el-col>
  27. <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
  28. <el-form-item label="创建时间:" prop="createTime">
  29. <el-date-picker
  30. v-model="timeSearch"
  31. style="width: 100%"
  32. value-format="yyyy-MM-dd"
  33. type="daterange"
  34. range-separator="-"
  35. start-placeholder="开始日期"
  36. end-placeholder="结束日期"
  37. :default-time="['00:00:00', '23:59:59']"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { lg: 4, md: 24 } : { span: 4 }">
  42. <div class="ele-form-actions">
  43. <el-button
  44. type="primary"
  45. icon="el-icon-search"
  46. class="ele-btn-icon"
  47. @click="reload('search')"
  48. >
  49. 查询
  50. </el-button>
  51. <el-button @click="reload('reset')">重置</el-button>
  52. </div>
  53. </el-col>
  54. </el-row>
  55. </el-form>
  56. </div>
  57. </el-card>
  58. <div class="ele-table-container" style="height: 100%">
  59. <ele-pro-table
  60. ref="table"
  61. :columns="columns"
  62. :datasource="datasource"
  63. :pageSizes="[10, 20, 50, 100]"
  64. :pageSize="20"
  65. height="calc(100% - 80px)"
  66. :key="tableKey"
  67. >
  68. <template v-slot:firstProcessDeliveryTime="{ row }">
  69. <el-date-picker
  70. v-if="!row.isEdit && !row.firstProcessDeliveryTime"
  71. v-model="firstTime"
  72. type="date"
  73. value-format="yyyy-MM-dd"
  74. placeholder="选择日期"
  75. @change="handleDateChange($event, row)"
  76. >
  77. </el-date-picker>
  78. <span> {{ row.firstProcessDeliveryTime || '请选择' }}</span>
  79. <i
  80. v-if="!row.firstProcessDeliveryTime"
  81. class="xiada el-icon-edit"
  82. @click="editFirstTime(row)"
  83. ></i>
  84. </template>
  85. <template v-slot:produceRoutingName="{ row }">
  86. <el-link
  87. type="primary"
  88. :underline="false"
  89. @click="produceRouting(row)"
  90. >
  91. {{ row.produceRoutingName }}</el-link
  92. >
  93. </template>
  94. <!-- 材料完成 -->
  95. <!-- 出库 -->
  96. <template v-slot:deliveryRecords="{ row }">
  97. <div v-if="row.deliveryStatus === 0" class="delivery-status">
  98. <span> 未发货 </span>
  99. <span> 数量:{{ row.productQuantity }} </span>
  100. </div>
  101. <div v-if="row.deliveryStatus === 1" class="delivery-status">
  102. <span> 已发:{{ row.deliveryQuantity }} </span>
  103. <span>
  104. 未发:{{ row.productQuantity - row.deliveryQuantity }}
  105. </span>
  106. </div>
  107. <div v-if="row.deliveryStatus === 2" class="delivery-status">
  108. <span> 全部发货 </span>
  109. <span> 数量:{{ row.deliveryQuantity }} </span>
  110. </div>
  111. </template>
  112. </ele-pro-table>
  113. </div>
  114. <produceRouting ref="produceRouting"></produceRouting>
  115. </div>
  116. </template>
  117. <script>
  118. import produceRouting from './components/produceRouting.vue';
  119. import {
  120. getList,
  121. getListPage,
  122. updateFirstProcessDeliveryTime,
  123. getProduceRoutingDetail
  124. } from '@/api/boss/index.js';
  125. import { mapGetters } from 'vuex';
  126. import { getColumns } from './columns.js';
  127. import { getRecords } from '@/utils/util';
  128. import { getByCode } from '@/api/system/dictionary-data';
  129. export default {
  130. components: {
  131. produceRouting
  132. },
  133. data() {
  134. return {
  135. tableKey: '',
  136. datasss: datasss,
  137. timeSearch: null,
  138. params: {
  139. startDate: '',
  140. endDate: '',
  141. customerId: '',
  142. projectId: '',
  143. orderNo: '',
  144. customerName: '',
  145. projectName: ''
  146. },
  147. columns: [],
  148. orderObj: {
  149. 0: '未提交',
  150. 1: '审核中',
  151. 2: '已审核',
  152. 3: '审核未通过',
  153. 7: '作废'
  154. },
  155. statusObj: {
  156. 0: '未发货',
  157. 1: '部分发货',
  158. 2: '全部发货'
  159. },
  160. firstTime: '',
  161. records: []
  162. };
  163. },
  164. computed: {
  165. ...mapGetters(['user']),
  166. // 是否开启响应式布局
  167. styleResponsive() {
  168. return this.$store.state.theme.styleResponsive;
  169. }
  170. },
  171. methods: {
  172. reload(type) {
  173. if (this.timeSearch) {
  174. this.params.startDate = this.timeSearch[0];
  175. this.params.endDate = this.timeSearch[1];
  176. }
  177. if (type == 'reset') {
  178. this.params = {
  179. startDate: '',
  180. endDate: '',
  181. customerId: '',
  182. projectId: '',
  183. orderNo: ''
  184. };
  185. }
  186. this.$refs.table.reload({ page: 1, where: this.params });
  187. },
  188. datasource({ page, where, limit, ...row }) {
  189. return getListPage({
  190. ...where,
  191. pageNum: page,
  192. size: limit
  193. });
  194. },
  195. editFirstTime(row) {
  196. row.isEdit = !row.isEdit;
  197. },
  198. // 选择首工序的时间
  199. async handleDateChange(e, item) {
  200. await updateFirstProcessDeliveryTime({
  201. id: item.saleOrderMaterialId,
  202. processDeliveryTime: e
  203. });
  204. this.$refs.table.reload({ where: this.params });
  205. },
  206. //打开工艺路线详情
  207. async produceRouting(row) {
  208. const res = await getProduceRoutingDetail({
  209. isDetail: false,
  210. pageNum: 1,
  211. size: -1,
  212. routingId: row.produceRoutingId
  213. });
  214. this.$refs.produceRouting.open({
  215. row: row,
  216. process: res
  217. });
  218. }
  219. },
  220. mounted() {
  221. this.$store.dispatch('theme/setBodyFullscreen', true);
  222. },
  223. beforeDestroy() {
  224. this.$store.dispatch('theme/setBodyFullscreen', false);
  225. },
  226. async created() {
  227. const res1 = await getByCode('production_status');
  228. this.productionStatus = res1.data;
  229. this.columns = getColumns(this);
  230. },
  231. beforeUpdate() {
  232. console.log('更新');
  233. }
  234. };
  235. </script>
  236. <style lang="scss" scoped>
  237. .app-container {
  238. background: #f0f3f3;
  239. min-height: calc(100vh - 84px);
  240. }
  241. .zw-page-table {
  242. background: #ffffff;
  243. padding-top: 20px;
  244. }
  245. .pagination-wrap {
  246. display: flex;
  247. justify-content: flex-end;
  248. padding: 10px 0;
  249. }
  250. .table {
  251. width: 100%;
  252. margin-top: 10px;
  253. }
  254. .outline {
  255. width: 100%;
  256. // min-width: 1px;
  257. position: relative;
  258. border-bottom: 1px solid #e5e5e5;
  259. // display: flex;
  260. // align-items: center;
  261. }
  262. .outlineBox .outline:last-child {
  263. border-bottom: none;
  264. }
  265. .xiada {
  266. position: absolute;
  267. top: 50%;
  268. right: 0;
  269. transform: translateY(-50%);
  270. }
  271. .records {
  272. display: flex;
  273. }
  274. //
  275. :deep(.spanbox) {
  276. display: flex;
  277. flex-wrap: wrap;
  278. }
  279. :deep(.span) {
  280. flex: 1;
  281. }
  282. .flex-col {
  283. display: flex;
  284. flex-direction: column;
  285. .col {
  286. flex: 1;
  287. align-content: center;
  288. white-space: nowrap;
  289. text-overflow: ellipsis;
  290. overflow: hidden;
  291. }
  292. }
  293. :deep(.el-card__body) {
  294. padding: 15px 15px 0 15px;
  295. }
  296. .ele-body {
  297. height: calc(100vh - 95px);
  298. .ele-table-container {
  299. height: 100%;
  300. :deep(.el-card__body) {
  301. padding: 0.3vw;
  302. }
  303. :deep(.ele-table-tool-default) {
  304. padding: 0 15px;
  305. }
  306. :deep(.has-gutter) {
  307. height: 50px;
  308. }
  309. :deep(.el-table__header) {
  310. height: 50px;
  311. // background-color: #615fe7;
  312. }
  313. :deep(.ele-pro-table) {
  314. height: 99%;
  315. }
  316. :deep(.el-table) {
  317. // font-size: 0.62vw;
  318. }
  319. }
  320. }
  321. .delivery-status {
  322. display: flex;
  323. justify-content: space-around;
  324. }
  325. </style>