create.blade.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. @extends('layouts.app')
  2. @section('content')
  3. <div id="nav2">
  4. @component('process.menu')@endcomponent
  5. </div>
  6. <div class="container-fluid mt-3" id="list">
  7. <div class="card col-md-8 offset-md-2">
  8. <div class="card-body">
  9. <div class="form-group row">
  10. <label class="col-3 col-form-label text-right" >单据号</label>
  11. <input v-model="process.wms_code" class="form-control col-6" :class="error.wms_code.length>0 ? 'is-invalid' :''">&nbsp;&nbsp;&nbsp;
  12. <input class="btn btn-info col-2" type="button" @click="addProcessContent()" value="新增库单据">
  13. <span v-if="error.wms_code.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  14. <strong>@{{ error.wms_code[0] }}</strong>
  15. </span>
  16. </div>
  17. <div class="form-group row" v-if="processContents.length>0" v-for="processContent in processContents">
  18. <div class="col-8 offset-md-3 pl-0 pt-2 border rounded">
  19. <div class="row pt-2">
  20. <label class="col-3 col-form-label text-right">单据号@{{ processContent.i }}</label>
  21. <b class="col-7">@{{ processContent.wms_code }}</b>
  22. </div>
  23. <div class="row pt-2" v-if="processContent.addBtnShow">
  24. <label class="col-3 col-form-label text-right">选择商品</label>
  25. <span class=" col-9 input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:1.5;text-align: center;">
  26. <ul class="list-group tooltipTarget" title="双击选择商品" style="width: 100%" onselectstart="return false;">
  27. <li v-for="commodity in processContent.commodities" :id="commodity.id" class="list-group-item list-group-item-action p-0 m-0"
  28. @dblclick="selectedCommodity(commodity,processContent.wms_code)" :class="processContent.commodity_id==commodity.id ? 'active' :''">
  29. <p class="form-inline" style="cursor: default;"><small class="text-left col-6">@{{ commodity.name }}</small><small class="text-left col-6">@{{ commodity.barcode }}</small></p></li>
  30. </ul>
  31. </span>
  32. </div>
  33. <div class="row pt-2">
  34. <label class="col-3 col-form-label text-right">商品名</label>
  35. <b class="col-7">@{{ processContent.commodity_name }}</b>
  36. </div>
  37. <div class="row pt-2">
  38. <label class="col-3 col-form-label text-right">条码</label>
  39. <b class="col-7">@{{ processContent.commodity_barcode }}</b>
  40. </div>
  41. <div class="row pt-2">
  42. <label class="col-3 col-form-label text-right">SKU</label>
  43. <b class="col-7">@{{ processContent.commodity_sku }}</b>
  44. </div>
  45. <div class="row pt-2">
  46. <label class="col-3 col-form-label text-right">单据类型</label>
  47. <select :disabled="!processContent.addBtnShow" v-model="processContent.bill_type" class="col-7 form-control"
  48. :class="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].bill_type ? 'is-invalid' :''">
  49. <option value="移库单">移库单</option>
  50. <option value="入库单">入库单</option>
  51. <option value="出库单">出库单</option>
  52. </select>
  53. </div>
  54. <div class="row pt-2">
  55. <label class="col-3 col-form-label text-right">数量</label>
  56. <input :readonly="!processContent.addBtnShow" v-model="processContent.amount" type="text" class="form-control col-7"
  57. :class="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].amount ? 'is-invalid' :''">
  58. <span v-if="processContentError[processContent.wms_code] && processContentError[processContent.wms_code].amount" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  59. <strong>@{{ processContentError[processContent.wms_code].amount[0] }}</strong>
  60. </span>
  61. </div>
  62. <div class="col-8 offset-2 pt-2" v-if="processContent.addBtnShow">
  63. <input type="button" @click="confirmStore(processContent.wms_code,processContent.commodity_id,processContent.amount)" value="确定新增" class="btn btn-primary form-control">
  64. </div>
  65. <div class="col-8 offset-2 pt-2 pb-2">
  66. <input type="button" @click="deleteProcessContent(processContent.wms_code)" value="删除" class="btn btn-danger form-control">
  67. </div>
  68. </div>
  69. </div>
  70. <div class="form-group row">
  71. <label class="col-3 col-form-label text-right" >货主</label>
  72. <input readonly v-if="processContents.length>0" :value="processContents[processContents.length-1].owner_name" class="form-control col-7" :class="error.owner_id.length>0 ? 'is-invalid' :''">
  73. <span v-if="error.owner_id.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  74. <strong>@{{ error.owner_id[0] }}</strong>
  75. </span>
  76. </div>
  77. <div class="form-group row">
  78. <label class="col-3 col-form-label text-right" >加工类型</label>
  79. <select v-model="process.process_method_id" class="form-control col-7" :class="error.process_method_id.length>0 ? 'is-invalid' :''">
  80. <option v-for="processMethod in processMethods" :value="processMethod.id">@{{ processMethod.name }}</option>
  81. </select>
  82. </div>
  83. <div class="form-group row">
  84. <label class="col-3 col-form-label text-right" >加工数量</label>
  85. <input v-model="process.amount" type="text" class="form-control col-7" :class="error.amount.length>0 ? 'is-invalid' :''">
  86. <span v-if="error.amount.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  87. <strong>@{{ error.amount[0] }}</strong>
  88. </span>
  89. </div>
  90. <div class="form-group row">
  91. <label class="col-3 col-form-label text-right" >单价</label>
  92. <input v-model="process.unit_price" type="text" class="form-control col-7" :class="error.unit_price.length>0 ? 'is-invalid' :''">
  93. <span v-if="error.unit_price.length>0" class="invalid-feedback col-7 offset-3 mt-0" role="alert">
  94. <strong>@{{ error.unit_price[0] }}</strong>
  95. </span>
  96. </div>
  97. <div class="form-group row">
  98. <label class="col-3 col-form-label text-right" >备注(选填)</label>
  99. <textarea v-model="process.remark" type="text" class="form-control col-7"></textarea>
  100. </div>
  101. <div class="form-group row">
  102. <label class="col-3 col-form-label text-right" >引用教程(选填)</label>
  103. <span class=" col-7 input-group p-0" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.7;text-align: center;">
  104. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  105. <li v-for="tutorial in tutorials" :data-original-title="tutorial.style ? '双击删除教程' :'双击添加教程'" :id="tutorial.id" class="tooltipTarget list-group-item list-group-item-action p-0 m-0"
  106. @dblclick="selectedTutorial(tutorial)" :class="tutorial.style ? 'active' :''">
  107. <p class="form-inline" style="cursor: default;">@{{ tutorial.name }}</p></li>
  108. </ul>
  109. </span>
  110. </div>
  111. <div class="form-group row">
  112. <div class="col-8 offset-2">
  113. <input type="button" @click="submit()" class="btn btn-success form-control" value="提交">
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. @endsection
  120. @section('lastScript')
  121. <script>
  122. let vueList=new Vue({
  123. el:'#list',
  124. data:{
  125. process:{wms_code:'',owner_id:'',process_method_id:'',unit_price:'',remark:'',amount:''},
  126. error:{wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]},
  127. processContentError:[],
  128. processContents:[],
  129. processMethods:[
  130. @foreach($processMethods as $processMethod)
  131. {!! $processMethod !!},
  132. @endforeach
  133. ],
  134. tutorials:[],
  135. selectedTutorials:[],
  136. },
  137. watch:{
  138. processContents:{
  139. handler(){
  140. if (this.processContents.length===1){
  141. this.process.owner_id=this.processContents[(this.processContents.length)-1].owner_id;
  142. this.getTutorial(this.processContents[(this.processContents.length)-1].owner_id);
  143. }
  144. }
  145. },
  146. },
  147. mounted:function(){
  148. $(".tooltipTarget").tooltip({'trigger':'hover'});
  149. },
  150. methods:{
  151. //新增库单据
  152. addProcessContent(){
  153. let _this=this;
  154. let wms_code=_this.process.wms_code;
  155. if (!wms_code){
  156. tempTip.setDuration(3000);
  157. tempTip.show('未输入单据号!');
  158. return;
  159. }
  160. if (_this.processContents.length>0 && _this.processContents[_this.processContents.length-1].addBtnShow) return;
  161. let isUnique=true;
  162. _this.processContents.every(function (processContent) {
  163. if (processContent.wms_code==wms_code){
  164. isUnique=false;
  165. return false;
  166. }
  167. return true;
  168. });
  169. if (!isUnique){
  170. tempTip.setDuration(3000);
  171. tempTip.show('下方已添加该单据!');
  172. return;
  173. }
  174. axios.post('{{url("api/thirdPart/flux/process/getProcessContent")}}',{wms_code:wms_code})
  175. .then(function (response) {
  176. let processContent={};
  177. processContent['wms_code']=response.data.wms_code;
  178. processContent['owner_name']=response.data.owner_name;
  179. processContent['owner_id']=response.data.owner_id;
  180. processContent['commodities']=response.data.commodities;
  181. processContent['commodity_id']='';
  182. processContent['commodity_name']='';
  183. processContent['commodity_barcode']='';
  184. processContent['commodity_sku']='';
  185. processContent['bill_type']=response.data.bill_type;
  186. processContent['amount']=response.data.amount;
  187. processContent['addBtnShow']=true;
  188. _this.processContents.unshift(processContent);
  189. }).catch(function (err) {
  190. tempTip.setDuration(3000);
  191. tempTip.show('查询单据号失败!网络错误:'+err);
  192. });
  193. },
  194. //确定新增
  195. confirmStore(wms_code,commodity_id,amount){
  196. if (!commodity_id) {
  197. tempTip.setDuration(2000);
  198. tempTip.show("尚未选择商品!");
  199. return;
  200. }
  201. if (!amount) {
  202. tempTip.setDuration(2000);
  203. tempTip.show("尚未填写数量!");
  204. return;
  205. }
  206. let _this=this;
  207. _this.processContents.every(function (processContent) {
  208. if (processContent.wms_code==wms_code) {
  209. processContent.addBtnShow=false;
  210. return false;
  211. }
  212. return true;
  213. });
  214. },
  215. //删除新增
  216. deleteProcessContent(wms_code){
  217. let _this=this;
  218. _this.processContents.every(function (processContent,i) {
  219. if (processContent.wms_code==wms_code) {
  220. _this.processContents.splice(i,1);
  221. return false;
  222. }
  223. return true;
  224. });
  225. },
  226. //获取教程
  227. getTutorial(owner_id){
  228. let _this=this;
  229. axios.post("{{url('process/ownerGetTutorials')}}"+"/"+owner_id)
  230. .then(function (response) {
  231. _this.tutorials=[];
  232. response.data.forEach(function (tutorialOne) {
  233. let tutorial={};
  234. tutorial['id']=tutorialOne.id;
  235. tutorial['name']=tutorialOne.name;
  236. tutorial['style']=false;
  237. _this.tutorials.push(tutorial);
  238. });
  239. }).catch(function (err) {
  240. tempTip.setDuration(5000);
  241. tempTip.show('获取教程失败!网络错误:'+err);
  242. });
  243. },
  244. //选择商品
  245. selectedCommodity(commodity,wms_code){
  246. let _this=this;
  247. _this.processContents.every(function (processContent) {
  248. if (processContent.wms_code==wms_code){
  249. processContent.commodity_id=commodity.id;
  250. processContent.commodity_name=commodity.name;
  251. processContent.commodity_barcode=commodity.barcode;
  252. processContent.commodity_sku=commodity.sku;
  253. return false;
  254. }
  255. return true;
  256. });
  257. },
  258. //选择教程
  259. selectedTutorial(tutorial){
  260. let _this=this;
  261. if (tutorial.style){
  262. for (let i=0;i<_this.selectedTutorials.length;i++){
  263. if (_this.selectedTutorials[i]==tutorial.id) {
  264. _this.selectedTutorials.splice(i,1);
  265. break;
  266. }
  267. }
  268. _this.tutorials.every(function (tutorialOne) {
  269. if (tutorialOne.id==tutorial.id){
  270. tutorialOne.style=false;
  271. return false;
  272. }
  273. return true;
  274. });
  275. }else {
  276. _this.selectedTutorials.push(tutorial.id);
  277. _this.tutorials.every(function (tutorialOne) {
  278. if (tutorialOne.id==tutorial.id){
  279. tutorialOne.style=true;
  280. return false;
  281. }
  282. return true;
  283. });
  284. }
  285. setTimeout(function(){
  286. $(".tooltipTarget").tooltip({'trigger':'hover'});
  287. },10);
  288. },
  289. //异补提交
  290. submit(){
  291. let _this=this;
  292. let owner_id=_this.process.owner_id;
  293. let process_method_id=_this.process.process_method_id;
  294. let unit_price=_this.process.unit_price;
  295. let remark=_this.process.remark;
  296. let amount=_this.process.amount;
  297. if (!owner_id || !process_method_id || !unit_price || !amount) {
  298. tempTip.setDuration(5000);
  299. tempTip.show('请确认您信息输入的完整性!');
  300. return;
  301. }
  302. _this.processContentError=[];
  303. axios.post('{{url("process")}}',{
  304. owner_id:owner_id,process_method_id:process_method_id,unit_price:unit_price,
  305. remark:remark,amount:amount,processContents:_this.processContents,tutorials:_this.selectedTutorials
  306. }).then(function (response) {
  307. if (response.data.error && response.data.data=="process"){
  308. _this.error=response.data.error;
  309. return;
  310. }
  311. _this.error={wms_code:[],owner_id:[],process_method_id:[],unit_price:[],amount:[]};
  312. if (response.data.error){
  313. _this.processContentError=response.data.error;
  314. return;
  315. }
  316. location.href="{{url('process')}}";
  317. }).catch(function (err) {
  318. tempTip.setDuration(5000);
  319. tempTip.show('提交失败!网络错误:'+err);
  320. });
  321. }
  322. },
  323. });
  324. </script>
  325. @endsection