invoicing_order.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. @extends('layouts.base')
  2. @section('content')
  3. @section('title', trans('发票设置'))
  4. @include('public.admin.box-item')
  5. @include('public.admin.invoice')
  6. <style>
  7. body{ background-color: #eff3f6; }
  8. .el-form-item__content{ max-width:800px;}
  9. .filing{height:80px;background:#fff;position: fixed;z-index:999; bottom: 0;width: 85.5%;border-radius: 10px 10px 0 0;line-height:80px;text-align:center;box-shadow: 0px -1px 10px rgb(0 0 0 / 10%);
  10. }
  11. .add-goods {height: 120px; border: dashed 1px #dde2ee;justify-content: center;align-items: center;}
  12. .good{width: 120px;display: flex;flex-direction: column;}
  13. .good:nth-child(n+2){margin-left: 20px;}
  14. .del-icon{width: 20px; height: 20px; background-color: rgb(221, 226, 238); display: flex; align-items: center; justify-content: center; position: absolute; right: -10px; top: -10px; border-radius: 50%;}
  15. </style>
  16. <div class="all">
  17. <div id="app">
  18. <box-item text="发票信息">
  19. <el-form ref="form" :model="form" label-width="200px" ref="form">
  20. <el-form-item label="发票类型">
  21. <el-radio-group v-model="form.invoice_type">
  22. <el-radio label="0">电子发票</el-radio>
  23. <el-radio label="1">纸质发票</el-radio>
  24. <el-radio label="2">专用发票</el-radio>
  25. </el-radio-group>
  26. </el-form-item>
  27. <div v-if="form.invoice_type==2">
  28. <template v-for="(item,i) in specialInvoiceList">
  29. <el-form-item :label="item.label" :rules="rules(item.label)" :prop="item.model" v-if="item.required" :key="'specialInvoiceList'+i">
  30. <el-input :placeholder="'请输入'+item.label" v-model="form[item.model]"></el-input>
  31. </el-form-item>
  32. <el-form-item :label="item.label" v-else :key="'specialInvoiceList'+i">
  33. <el-input :placeholder="'请输入'+item.label" v-model="form[item.model]"></el-input>
  34. </el-form-item>
  35. </template>
  36. </div>
  37. <div v-if="form.invoice_type==1 || form.invoice_type==0">
  38. <el-form-item label="发票抬头">
  39. <el-radio-group v-model="form.rise_type">
  40. <el-radio label="1">个人</el-radio>
  41. <el-radio label="0">单位</el-radio>
  42. </el-radio-group>
  43. </el-form-item>
  44. <el-form-item label="抬头名称" :rules="rules('抬头名称')" prop="collect_name" v-if="form.rise_type==1">
  45. <el-input placeholder="请输入抬头名称" v-model="form.collect_name"></el-input>
  46. </el-form-item>
  47. <template v-if="form.rise_type==0">
  48. <el-form-item label="单位" :rules="rules('单位')" prop="collect_name" >
  49. <el-input placeholder="请输入单位" v-model="form.collect_name"></el-input>
  50. </el-form-item>
  51. <el-form-item label="税号" :rules="rules('税号')" prop="gmf_taxpayer">
  52. <el-input placeholder="请输入税号" v-model="form.gmf_taxpayer"></el-input>
  53. </el-form-item>
  54. </template>
  55. <el-form-item label="发票内容">
  56. <el-radio-group v-model="form.content">
  57. <el-radio label="0">商品明细</el-radio>
  58. <el-radio label="1">商品类别</el-radio>
  59. </el-radio-group>
  60. </el-form-item>
  61. <div v-if="form.rise_type==0">
  62. <el-form-item :label="item.label" v-for="(item,i) in branInfoList" :key="'branInfoList'+i">
  63. <el-input :placeholder="'请输入'+item.label" v-model="form[item.model]"></el-input>
  64. </el-form-item>
  65. </div>
  66. <template v-if="form.invoice_type==1">
  67. <el-form-item label="收票人姓名">
  68. <el-input placeholder="请输入收票人姓名" v-model="form.col_name"></el-input>
  69. </el-form-item>
  70. <el-form-item label="收票人手机号">
  71. <el-input placeholder="请输入收票人手机号" v-model="form.col_mobile"></el-input>
  72. </el-form-item>
  73. <el-form-item label="收票人地址">
  74. <el-input placeholder="请输入收票人地址" v-model="form.col_address"></el-input>
  75. </el-form-item>
  76. </template>
  77. <el-form-item label="收票邮箱" v-if="form.invoice_type==0">
  78. <el-input placeholder="请输入收票邮箱" v-model="form.email"></el-input>
  79. </el-form-item>
  80. </div>
  81. <el-form-item label="指定商品">
  82. <div style="display: flex;flex-wrap: wrap;">
  83. <div class="good" v-for="(item,i) in pickGoods" :key="i">
  84. <div class="img" style="position: relative;">
  85. <a style="color: rgb(51, 51, 51);">
  86. <div class="del-icon" @click="pickGoods.splice(i,1)">X</div>
  87. </a>
  88. <img :src="item.thumb" alt="" width="120px" height="120px">
  89. </div>
  90. <div style="display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; font-size: 12px;">[[item.title + "[ID" + item.id + "]"]]</div>
  91. </div>
  92. <div class="add-goods good" @click="getGoods(null)">
  93. <a style="font-size: 32px; color: rgb(153, 153, 153);">
  94. <i class="el-icon-plus"></i>
  95. </a>
  96. <div style="color: rgb(153, 153, 153);">选择商品</div>
  97. </div>
  98. </div>
  99. </el-form-item>
  100. <el-form-item label="开票金额">
  101. <el-input placeholder="请输入开票金额" v-model="form.price">
  102. <template slot="append">元</template>
  103. </el-input>
  104. </el-form-item>
  105. </el-form>
  106. </box-item>
  107. <div style="height: 100px;"></div>
  108. <div class="filing">
  109. <el-button type="primary" @click="invoicing">确认开票</el-button>
  110. </div>
  111. <invoice v-model="dialogVisible" :show="dialogVisible" :url="currentPath" :order_id="order_id" :form="form"></invoice>
  112. <el-dialog title="选择商品" :visible.sync="pickGoodsShow" width="800">
  113. <div class="goods-list">
  114. <div class="search-goods" style="display: flex;margin-bottom: 20px;padding: 0 40px;">
  115. <el-input style="flex: 1;margin-right: 20px;" placeholder="输入关键字搜索" v-model="keyword"></el-input>
  116. <el-button @click="getGoods(keyword)">搜索</el-button>
  117. </div>
  118. <el-table :data="tableData" v-loading="tableLoading">
  119. <el-table-column prop="id" label="ID" width="180"></el-table-column>
  120. <el-table-column label="商品信息">
  121. <template slot-scope="scope">
  122. <div style="display: flex; align-items: center;">
  123. <img :src="scope.row.thumb" alt="" width="50px" height="50px">
  124. <div style="margin-left: 10px;">[[scope.row.title]]</div>
  125. <div style="margin-left: 10px;color: #ff1717" v-if="scope.row.is_refund&&scope.row.belongs_to_refund_goods_log&&scope.row.belongs_to_refund_goods_log.belongs_to_order_fund">
  126. [[ scope.row.belongs_to_refund_goods_log.belongs_to_order_fund.refund_type_name ]]
  127. </div>
  128. </div>
  129. </template>
  130. </el-table-column>
  131. <el-table-column label="商品信息" width="180">
  132. <template slot-scope="scope">
  133. <el-button @click="handleClick(scope.row)" type="text" size="small">[[scope.row.change?"已":""]]选择</el-button>
  134. </template>
  135. </el-table-column>
  136. </el-table>
  137. </div>
  138. </el-dialog>
  139. </div>
  140. </div>
  141. <script>
  142. let order_id = "{{ request()-> order_id }}";
  143. let vm = new Vue({
  144. el:"#app",
  145. delimiters: ['[[', ']]'],
  146. data(){
  147. return {
  148. keyword:"",
  149. currentPath:"{!!yzWebFullUrl('plugin.invoice.admin.invoicing-order.set-invoice')!!}" + "&order_id=" + order_id,
  150. branInfoList:[
  151. {label:"开户银行",model:"bank"},
  152. {label:"银行账号",model:"bank_admin"},
  153. {label:"注册地址",model:"address"},
  154. {label:"注册电话",model:"gmf_mobile"},
  155. ],
  156. //专用发票
  157. specialInvoiceList:[
  158. {required: true,label:"单位",model:"collect_name"},
  159. {required: true,label:"税号",model:"taxpayer"},
  160. {required: true,label:"开户银行",model:"bank"},
  161. {required: true,label:"银行账号",model:"bank_admin"},
  162. {required: true,label:"注册地址",model:"address"},
  163. {required: true,label:"注册电话",model:"gmf_mobile"},
  164. {required: false,label:"收票人姓名",model:"col_name"},
  165. {required: false,label:"收票人手机号",model:"col_mobile"},
  166. {required: false,label:"收票人地址",model:"col_address"},
  167. ],
  168. form:{
  169. invoice_type:"0",
  170. rise_type:"1",
  171. collect_name:"",
  172. taxpayer:"",
  173. address:"",
  174. mobile:"",
  175. gmf_bank_admin:"",
  176. gmf_taxpayer:"",
  177. email:"",
  178. price:"",
  179. content:"0",
  180. manual:"1",//1为手动开票
  181. order_id//订单id
  182. },
  183. pickGoods:[],
  184. order_id,
  185. dialogVisible:false,
  186. pickGoodsShow:false,
  187. tableData:[],
  188. tableLoading:false
  189. }
  190. },
  191. created(){
  192. },
  193. methods:{
  194. rules(message){
  195. return [{ required: true, message: '请输入' + message, trigger: 'blur' }]
  196. },
  197. handleClick(row,index){
  198. row.change = !row.change;
  199. for (let i = 0; i < this.pickGoods.length; i++) {
  200. if (this.pickGoods[i].id == row.id) {
  201. this.pickGoods.splice(i,1);
  202. return false;
  203. }
  204. }
  205. this.pickGoods.push(row);
  206. },
  207. getGoods(keyword){
  208. this.pickGoodsShow = true;
  209. this.tableLoading = true;
  210. this.tableData = [];
  211. let json = {order_id};
  212. if(keyword) json.keyword = keyword;
  213. this.$http.post("{!!yzWebFullUrl('plugin.invoice.admin.invoicing_order.get-goods')!!}",json).then(({data:{result,msg,data}})=>{
  214. this.tableLoading = false;
  215. if (result == 1) {
  216. data.forEach(item=>{
  217. let isChange = false;
  218. this.pickGoods.forEach(goods=>{
  219. if (goods.id==item.id) {
  220. isChange = true;
  221. }
  222. })
  223. item.change = isChange;
  224. this.tableData.push(item);
  225. })
  226. }else this.$message.error(msg);
  227. })
  228. },
  229. confirmInvoicing(){
  230. // let ids = [];
  231. // this.pickGoods.forEach(item=>{
  232. // ids.push(item.id)
  233. // })
  234. // this.form.goods_ids = ids.toString();
  235. this.form.goods = this.pickGoods;
  236. this.dialogVisible = true;
  237. },
  238. invoicing(type){
  239. this.$refs.form.validate((valid) => {
  240. if (valid) {
  241. this.confirmInvoicing();
  242. } else {
  243. console.log('error submit!!');
  244. return false;
  245. }
  246. });
  247. }
  248. }
  249. })
  250. </script>
  251. @endsection('content')