order-search.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <!-- 搜索表单 -->
  2. <template>
  3. <el-form
  4. label-width="90px"
  5. class="ele-form-search"
  6. @keyup.enter.native="search"
  7. @submit.native.prevent
  8. >
  9. <el-row :gutter="15">
  10. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  11. <el-form-item label="销售订单号:">
  12. <el-input v-model="where.code" placeholder="请输入"></el-input>
  13. </el-form-item>
  14. </el-col>
  15. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  16. <el-form-item label="产品编码:">
  17. <el-input v-model="where.productCode" placeholder="请输入"></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  21. <el-form-item label="行号:">
  22. <el-input v-model="where.lineNumber" placeholder="请输入"></el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  26. <el-form-item label="牌号:">
  27. <el-input v-model="where.brandNo" placeholder="请输入"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  31. <el-form-item label="型号:">
  32. <el-input v-model="where.model" placeholder="请输入"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  36. <el-form-item label="订单来源:">
  37. <DictSelection dictName="订单来源" clearable v-model="where.orderSource">
  38. </DictSelection>
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  42. <el-form-item label="客户名称:">
  43. <el-input v-model="where.customerName" placeholder="请输入"></el-input>
  44. </el-form-item>
  45. </el-col>
  46. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  47. <el-form-item label="订单类型:">
  48. <DictSelection dictName="订单类型" clearable v-model="where.orderType">
  49. </DictSelection>
  50. </el-form-item>
  51. </el-col>
  52. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  53. <el-form-item label="生产状态:">
  54. <el-select v-model="where.proStu" placeholder="请选择">
  55. <el-option
  56. v-if="chooseName=='first'"
  57. v-for="item in awaitProcuct"
  58. :key="item.value"
  59. :label="item.label"
  60. :value="item.value">
  61. </el-option>
  62. <el-option
  63. v-if="chooseName=='second'"
  64. v-for="item in alreadyProcuct"
  65. :key="item.value"
  66. :label="item.label"
  67. :value="item.value">
  68. </el-option>
  69. </el-select>
  70. </el-form-item>
  71. </el-col>
  72. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  73. <el-form-item label="按单按库:">
  74. <DictSelection dictName="按单按库" clearable v-model="where.orderLibraryType">
  75. </DictSelection>
  76. </el-form-item>
  77. </el-col>
  78. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  79. <el-form-item label="业务员:">
  80. <el-input v-model="where.salesman" placeholder="请输入"></el-input>
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. <el-row :gutter="15">
  85. <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
  86. <el-form-item label="交货日期:">
  87. <el-date-picker
  88. style="width: 100%;"
  89. v-model="time"
  90. type="daterange"
  91. range-separator="至"
  92. start-placeholder="开始日期"
  93. end-placeholder="结束日期"
  94. value-format="yyyy-MM-dd HH:mm:ss"
  95. :default-time="['00:00:00', '23:59:59']"
  96. >
  97. </el-date-picker>
  98. </el-form-item>
  99. </el-col>
  100. <el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
  101. <div class="ele-form-actions">
  102. <el-button
  103. type="primary"
  104. icon="el-icon-search"
  105. class="ele-btn-icon"
  106. @click="search"
  107. size="small"
  108. >
  109. 查询
  110. </el-button>
  111. <el-button @click="reset"
  112. icon="el-icon-refresh-left"
  113. size="small"
  114. type="primary"
  115. >重置</el-button>
  116. </div>
  117. </el-col>
  118. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  119. <el-form-item label-width="0px">
  120. <el-button @click="goProduct">转生产计划</el-button>
  121. <el-button type="primary" @click="orderRefresh">订单刷新</el-button>
  122. <el-button type="success" @click="toCreate">创建订单</el-button>
  123. <el-upload
  124. class="avatar-uploader"
  125. action="#"
  126. :show-file-list="false"
  127. :http-request="uploadFile"
  128. :before-upload="beforeUpload"
  129. :on-change="handleChange"
  130. >
  131. <el-button type="warning">批量导入</el-button>
  132. </el-upload>
  133. <el-button type="info">
  134. <a :href="fileUrl" download="销售订单导入模板.xls" class="button-link">下载模板</a>
  135. </el-button>
  136. <el-button type="danger" @click="batchDelete">批量删除</el-button>
  137. </el-form-item>
  138. </el-col>
  139. </el-row>
  140. <!-- 导入异常 -->
  141. <import-exception ref="importDialog"> </import-exception>
  142. <!-- 创建订单 -->
  143. <create-order ref="createDialog" @refresh="search"> </create-order>
  144. <!-- 订单组合 -->
  145. <group-order ref="groupDialog"> </group-order>
  146. </el-form>
  147. </template>
  148. <script>
  149. import ImportException from '../components/import-exception.vue'
  150. import CreateOrder from '../components/create-order.vue'
  151. import GroupOrder from '../components/group-order.vue'
  152. import { importFile } from '@/api/saleOrder';
  153. import fileUrl from '@/assets/file/销售订单导入模板.xlsx';
  154. import { pullSalesOrder , deleteOrder } from '@/api/saleOrder';
  155. export default {
  156. props: {
  157. selection:Array
  158. },
  159. components: {
  160. ImportException,
  161. CreateOrder,
  162. GroupOrder
  163. },
  164. data() {
  165. // 默认表单数据
  166. const defaultWhere = {
  167. code:'',
  168. productCode:'',
  169. customerName:'',
  170. lineNumber:'',
  171. model:'',
  172. brandNo:'',
  173. orderSource:'',
  174. orderType:'',
  175. proStu:'',
  176. orderLibraryType:'',
  177. salesman:'',
  178. };
  179. return {
  180. fileUrl,
  181. // 表单数据
  182. where: { ...defaultWhere },
  183. time:[],
  184. fileList:[],
  185. awaitProcuct:[
  186. {value:1,label:'待排产'}
  187. ],
  188. alreadyProcuct:[
  189. {value:0,label:'所有状态'},
  190. {value:2,label:'待发布'},
  191. {value:3,label:'发布失败'},
  192. {value:4,label:'待生产'},
  193. {value:5,label:'生产中'},
  194. {value:6,label:'已完成'},
  195. {value:7,label:'已延期'}
  196. ],
  197. chooseName:'first'
  198. };
  199. },
  200. computed: {
  201. // 是否开启响应式布局
  202. styleResponsive() {
  203. return this.$store.state.theme.styleResponsive;
  204. }
  205. },
  206. created(){
  207. },
  208. methods: {
  209. setData(activeName){
  210. this.chooseName = activeName
  211. this.where.proStu = ''
  212. },
  213. /* 搜索 */
  214. search() {
  215. if(this.time.length){
  216. this.where.startTime = this.time[0]
  217. this.where.endTime = this.time[1]
  218. }
  219. this.$emit('search', this.where);
  220. },
  221. /* 重置 */
  222. reset() {
  223. this.time = []
  224. this.where = { ...this.defaultWhere };
  225. this.search();
  226. },
  227. toImport(){
  228. this.$refs.importDialog.open()
  229. },
  230. toCreate(){
  231. this.$refs.createDialog.open()
  232. },
  233. toGroup(){
  234. this.$refs.groupDialog.open()
  235. },
  236. goProduct(){
  237. if(!this.selection.length){
  238. return this.$message.warning('请先勾选一个或多个订单!')
  239. }
  240. const productCode = this.selection[0].productCode
  241. for(var i=0;i<this.selection.length;i++){
  242. if(productCode != this.selection[i].productCode){
  243. return this.$message.warning('产品编码不一致!')
  244. }
  245. }
  246. const list = []
  247. this.selection.map((item) => {
  248. list.push(item.id);
  249. });
  250. this.$router.push({
  251. path: '/saleOrder/salesToProduction',
  252. query:{
  253. selection:JSON.stringify(list)
  254. }
  255. });
  256. },
  257. // 刷新订单
  258. orderRefresh(){
  259. pullSalesOrder().then(res=>{
  260. })
  261. },
  262. // 点击批量删除
  263. batchDelete(){
  264. if(!this.selection.length){
  265. return this.$message.warning('请先勾选一个或多个订单!')
  266. }
  267. let ids = []
  268. this.selection.map(item=>{
  269. ids.push(item.id)
  270. })
  271. this.$confirm('此操作将永久删除所选择的订单, 是否继续?', '提示', {
  272. confirmButtonText: '确定',
  273. cancelButtonText: '取消',
  274. type: 'warning'
  275. }).then(() => {
  276. deleteOrder(ids).then(res=>{
  277. this.$message.success(res)
  278. this.search();
  279. })
  280. }).catch(() => {
  281. })
  282. },
  283. handleChange(file, fileList) {
  284. this.fileList = fileList;
  285. console.log(fileList)
  286. },
  287. //上传限制
  288. beforeUpload (file) {
  289. const isLt10M = file.size / 1024 / 1024 < 10;
  290. if (!isLt10M) {
  291. this.$message.error('上传文件大小不能超过 10MB!');
  292. }
  293. return isLt10M;
  294. },
  295. //文件上传
  296. uploadFile (param) {
  297. let fd = new FormData();
  298. this.fileList.forEach(item=>{
  299. fd.append("importExcel",item.raw);
  300. })
  301. importFile(fd).then(res=>{
  302. this.$emit('search', this.where);
  303. })
  304. },
  305. }
  306. };
  307. </script>
  308. <style lang="scss" scoped>
  309. .ele-form-actions{
  310. display:flex;
  311. align-items: center;
  312. justify-content: flex-end;
  313. }
  314. .avatar-uploader{
  315. display: inline-block;
  316. margin: 0 10px;
  317. }
  318. .button-link{
  319. color: #fff;
  320. }
  321. </style>