addInvoice.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <!-- 新增发票 -->
  2. <template>
  3. <view class="invoice">
  4. <view class="invoice-form">
  5. <u-form :model="form" :rules="rules" ref="uForm" label-width="150" label-align="right">
  6. <u-form-item label="抬头:">
  7. <u-radio-group v-model="queryParams.invoHeadType" @change="invoTypeChange">
  8. <u-radio :name="1">企业</u-radio>
  9. <u-radio :name="2">个人</u-radio>
  10. </u-radio-group>
  11. </u-form-item>
  12. <u-form-item label="抬头名称:" prop="invoName">
  13. <u-input v-model="form.invoName" placeholder="请输入抬头名称" border />
  14. <u-icon slot="right" name="list-dot" size="40" color="#606266" @click="moreCompany" />
  15. </u-form-item>
  16. <u-form-item label="税号:" prop="invoCode" v-if="queryParams.invoHeadType === 1">
  17. <u-input v-model="form.invoCode" placeholder="请输入税号" border />
  18. </u-form-item>
  19. <u-form-item label="更多内容:" prop="moreContentValue">
  20. <u-input v-model="moreContentPop.moreContentValue" placeholder="开户银行、银行账号等" border disabled />
  21. <u-icon slot="right" name="arrow-right" size="36" color="#606266" @click="moreContent" />
  22. </u-form-item>
  23. <u-form-item label="发票金额:"> ¥{{ form.amount }} </u-form-item>
  24. </u-form>
  25. </view>
  26. <view class="invoice-form margin-top">
  27. <u-form :model="form" ref="uForm1" label-width="150" label-align="right">
  28. <!-- <u-form-item label="开户银行:" prop="openBank">
  29. <u-input v-model="form.openBank" placeholder="选填" border />
  30. </u-form-item>
  31. <u-form-item label="银行账号:" prop="numBank">
  32. <u-input v-model="form.numBank" placeholder="选填" border />
  33. </u-form-item>
  34. <u-form-item label="企业地址:" prop="mapCom">
  35. <u-input v-model="form.mapCom" placeholder="选填" border />
  36. </u-form-item>
  37. <u-form-item label="企业电话:" prop="phoneCom">
  38. <u-input v-model="form.phoneCom" placeholder="选填" border />
  39. </u-form-item> -->
  40. <u-form-item label="电子邮箱:" prop="invoMail">
  41. <u-input v-model="form.invoMail" placeholder="选填" border />
  42. </u-form-item>
  43. <u-form-item label="手机号码:" prop="invoPhone">
  44. <u-input v-model="form.invoPhone" placeholder="选填" border />
  45. </u-form-item>
  46. </u-form>
  47. </view>
  48. <view class="invoice-submit">
  49. <u-button type="primary" :loading="loading" @click="submitForm">提交</u-button>
  50. </view>
  51. <!-- 公司弹框 -->
  52. <u-popup v-model="companyPop.show" mode="bottom" :closeable="true" height="50vh">
  53. <view class="popup">
  54. <view class="popup-list" v-if="companyPop.list.length">
  55. <u-radio-group class="popup-list-group" v-model="form.companyName" :wrap="true">
  56. <u-radio
  57. class="popup-list-item"
  58. v-for="(item, index) in companyPop.list"
  59. :key="index"
  60. :name="item.invoName"
  61. @change="companyRadioClick(item)"
  62. >
  63. {{ item.invoName }}
  64. </u-radio>
  65. </u-radio-group>
  66. </view>
  67. <view class="popup-list" v-else>
  68. <view class="popup-list-item">暂未添加发票开头</view>
  69. </view>
  70. <view class="popup-bottom">
  71. <u-button type="info" @click="addInvoiceHeader">添加常用发票开头</u-button>
  72. </view>
  73. </view>
  74. </u-popup>
  75. <!-- 更多内容 -->
  76. <u-popup v-model="moreContentPop.show" mode="center" width="100%" height="100%">
  77. <view class="invoice-more-pop">
  78. <view class="invoice-more-pop-form">
  79. <u-form :model="moreContentPop.form" ref="uForm2" label-width="150" label-align="right">
  80. <u-form-item label="开户银行:" prop="openBank">
  81. <u-input v-model="form.openBank" placeholder="选填" border />
  82. </u-form-item>
  83. <u-form-item label="银行账号:" prop="numBank">
  84. <u-input v-model="form.numBank" placeholder="选填" border />
  85. </u-form-item>
  86. <u-form-item label="企业地址:" prop="mapCom">
  87. <u-input v-model="form.mapCom" placeholder="选填" border />
  88. </u-form-item>
  89. <u-form-item label="企业电话:" prop="phoneCom">
  90. <u-input v-model="form.phoneCom" placeholder="选填" border />
  91. </u-form-item>
  92. </u-form>
  93. </view>
  94. <view class="invoice-more-pop-submit">
  95. <u-button type="primary" @click="moreContentConfirm">确定</u-button>
  96. </view>
  97. </view>
  98. </u-popup>
  99. <u-toast ref="uToast" />
  100. </view>
  101. </template>
  102. <script>
  103. export default {
  104. data() {
  105. return {
  106. form: {
  107. invoName: '',
  108. invoCode: '',
  109. invoHeadId: '',
  110. invoMail: '',
  111. invoPhone: '',
  112. invoType: 1,
  113. phoneCom: '',
  114. mapCom: '',
  115. openBank: '',
  116. numBank: '',
  117. amount: '',
  118. orderIds: []
  119. },
  120. rules: {
  121. invoType: [{ required: true, message: '请选择发票类型', trigger: 'change' }],
  122. invoName: [{ required: true, message: '请输入抬头名称', trigger: 'blur' }],
  123. invoCode: [{ required: true, message: '请输入税号', trigger: 'blur' }]
  124. },
  125. companyPop: {
  126. show: false,
  127. list: []
  128. },
  129. loading: false,
  130. queryParams: {
  131. invoHeadType: 1
  132. },
  133. moreContentPop: {
  134. show: false,
  135. moreContentValue: ''
  136. }
  137. };
  138. },
  139. onLoad(options) {
  140. const { invoType } = options;
  141. this.form.invoType = invoType;
  142. this.getInvoiceHeaderSelect();
  143. uni.getStorage({
  144. key: 'availableOrderKey',
  145. success: (res) => {
  146. const { total, ids } = JSON.parse(res.data);
  147. this.form.amount = total;
  148. this.form.orderIds = ids;
  149. }
  150. });
  151. },
  152. onReady() {
  153. this.$refs.uForm.setRules(this.rules);
  154. },
  155. methods: {
  156. /**
  157. * @description: 选择企业
  158. * @return {*}
  159. */
  160. moreCompany() {
  161. this.companyPop.show = true;
  162. },
  163. moreContent() {
  164. this.moreContentPop.show = true;
  165. },
  166. /**
  167. * @description: 获取发票抬头下拉
  168. * @return {*}
  169. */
  170. async getInvoiceHeaderSelect() {
  171. const { code, data } = await this.$u.api.invoiceModuleApi.getInvoiceHeadSelectApi({ ...this.queryParams });
  172. if (code === 200) {
  173. this.companyPop.list = data;
  174. if (data[0].invoStatus === 1) {
  175. this.form.invoName = data[0].invoName;
  176. this.form.invoCode = data[0].invoCode;
  177. this.form.invoHeadId = data[0].id;
  178. } else {
  179. this.form.invoName = '';
  180. this.form.invoCode = '';
  181. this.form.invoHeadId = '';
  182. }
  183. }
  184. },
  185. /**
  186. * @description: 选择抬头
  187. * @param {*} item
  188. * @return {*}
  189. */
  190. companyRadioClick(item) {
  191. this.companyPop.show = false;
  192. this.form.invoName = item.invoName;
  193. this.form.invoCode = item.invoCode;
  194. this.form.invoHeadId = item.id;
  195. },
  196. addInvoiceHeader() {
  197. this.companyPop.show = false;
  198. this.$u.route({
  199. url: '/pages/invoiceModule/invoiceHeaderList/invoiceHeaderList'
  200. });
  201. },
  202. /**
  203. * @description: 抬头类型切换
  204. * @param {*} val
  205. * @return {*}
  206. */
  207. invoTypeChange(val) {
  208. this.queryParams.invoHeadType = val;
  209. this.getInvoiceHeaderSelect();
  210. },
  211. moreContentConfirm() {
  212. this.moreContentPop.show = false;
  213. let moreContentTotal = 0;
  214. if (this.form.openBank) {
  215. moreContentTotal += 1;
  216. }
  217. if (this.form.numBank) {
  218. moreContentTotal += 1;
  219. }
  220. if (this.form.mapCom) {
  221. moreContentTotal += 1;
  222. }
  223. if (this.form.phoneCom) {
  224. moreContentTotal += 1;
  225. }
  226. if (moreContentTotal > 0) {
  227. this.moreContentPop.moreContentValue = `共4项 已填写${moreContentTotal}项`;
  228. } else {
  229. this.moreContentPop.moreContentValue = '';
  230. }
  231. },
  232. submitForm() {
  233. this.$refs.uForm.validate(async (valid) => {
  234. if (valid) {
  235. try {
  236. this.loading = true;
  237. const { invoHeadId, invoName, invoCode, invoMail, invoPhone, invoType, phoneCom, mapCom, openBank, numBank, orderIds } = this.form;
  238. const { code } = await this.$u.api.invoiceModuleApi.addInvoiceApi({
  239. invoHeadId,
  240. invoName,
  241. invoCode,
  242. invoMail,
  243. invoPhone,
  244. invoType,
  245. phoneCom,
  246. mapCom,
  247. openBank,
  248. numBank,
  249. orderIds
  250. });
  251. if (code === 200) {
  252. this.loading = false;
  253. this.$refs.uToast.show({
  254. title: '添加成功!',
  255. type: 'success',
  256. duration: 2000,
  257. url: '/pages/invoiceModule/invoiceSuccess/invoiceSuccess'
  258. });
  259. }
  260. } catch (error) {
  261. this.loading = false;
  262. }
  263. }
  264. });
  265. }
  266. }
  267. };
  268. </script>
  269. <style lang="scss" scoped>
  270. @import './addInvoice.scss';
  271. </style>