join.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <!-- eslint-disable vue/valid-v-model -->
  2. <template>
  3. <div class="p-spac p-fz">
  4. <div class="defbb p-spac">企业认证 [ <span class="gray-color" :class="{ 'green-color': isAuth }">{{ authText }}</span> ]
  5. </div>
  6. <div v-if="isAuth" class="s-fz flex p-spac p-b-0">
  7. <div class="flex1 defbb ">
  8. <div class="chunk1">
  9. <div><span>公司名称:</span>{{ carrierAuthInfo.orgName }}</div>
  10. <div class=" "><span>统一社会信用代码:</span>{{ carrierAuthInfo.taxpayer }}</div>
  11. </div>
  12. <div class="gray-color defbb p-spac">公司营业执照</div>
  13. <div class="p-spac">
  14. <el-image class="big-img" fit="cover" :src="$tools.getFullFileUrl(carrierAuthInfo.businessLicense)"
  15. :preview-src-list="[$tools.getFullFileUrl(carrierAuthInfo.businessLicense)]">
  16. </el-image>
  17. </div>
  18. </div>
  19. <div class="flex1 defbb ml-spacm4">
  20. <div class="chunk1">
  21. <div class="abs-rt"><span>证件类型:</span>身份证</div>
  22. <div><span>法人姓名:</span>{{ carrierAuthInfo.legalperson }}</div>
  23. <div><span>证件号:</span>{{ carrierAuthInfo.idCardNo }}</div>
  24. </div>
  25. <div class="flex">
  26. <div class="mr-spac">
  27. <div class="gray-color defbb p-spac">法人身份证人像面</div>
  28. <div class="p-spac">
  29. <el-image class="small-img" fit="cover" :src="$tools.getFullFileUrl(carrierAuthInfo.idCardFront)"
  30. :preview-src-list="[$tools.getFullFileUrl(carrierAuthInfo.idCardFront)]">
  31. </el-image>
  32. </div>
  33. </div>
  34. <div>
  35. <div class="gray-color defbb p-spac">法人身份证人像面</div>
  36. <div class="p-spac">
  37. <el-image class="small-img" fit="cover" :src="$tools.getFullFileUrl(carrierAuthInfo.idCardBack)"
  38. :preview-src-list="[$tools.getFullFileUrl(carrierAuthInfo.idCardBack)]">
  39. </el-image>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. <auth v-else v-model="carrierAuthInfo" />
  46. <template v-if="module.carrierRoadInfo.show">
  47. <div class="defbb p-spac">
  48. 资质审核 [
  49. <span class="gray-color" :class="{ 'green-color': isreView,'p-wcolor':reViewing }">{{
  50. operateState
  51. }}</span>
  52. ]
  53. <el-button type="text" v-if="module.carrierRoadInfo.edit && reViewing" @click="getCarrierInfo()"
  54. :loading="$reqState($interfaces.user.get_carrier_info).ing">刷新</el-button>
  55. <span class="ml-spac p-wcolor" v-if="!isAuth">
  56. [ 提醒:请先完成“企业认证”!]</span>
  57. </div>
  58. <div class="p-spac p-b-0 flex defbb">
  59. <div :class="{flex1:!module.carrierRoadInfo.edit}">
  60. <div class="gray-color" :class="carrierRoadInfoView ? 'defbb pb-spac' : 'required ml-spac mb-spac'
  61. ">
  62. 道路运输经营许可证
  63. </div>
  64. <div class="p-spac" v-if="carrierRoadInfoView">
  65. <el-image class="big-img" fit="cover" :src="$tools.getFullFileUrl(carrierRoadInfo.roadTransport)"
  66. :preview-src-list="[$tools.getFullFileUrl(carrierRoadInfo.roadTransport)]">
  67. </el-image>
  68. </div>
  69. <el-form v-else ref="carrierRoadInfo" :model="carrierRoadInfo" :rules="rules" size="mini">
  70. <el-form-item prop="roadTransport">
  71. <upload-img :fileList="carrierRoadInfoImg" :big="true" :disabled="!isAuth"
  72. @uploadOrgPic="uploadOrgPic"></upload-img>
  73. </el-form-item>
  74. </el-form>
  75. </div>
  76. <div v-if="!module.carrierRoadInfo.edit" class="flex1 ml-spacm4">
  77. <div class="defbb gray-color pb-spac">审核记录</div>
  78. <div class="p-spacd2" v-for="(crir,i) in carrierRoadInfo.records" :key="i">
  79. {{ crir.createDate }} {{ crir.createrName }} {{ crir.action }}
  80. </div>
  81. </div>
  82. <div class="flex-column justify-between flex-items-start ml-spac pb-spac" v-else>
  83. <div v-if="isAuth && isReject">
  84. 驳回理由:
  85. <div>{{ carrierRoadInfo.reason }}</div>
  86. </div>
  87. <div v-else></div>
  88. <el-button v-if="isAuth && (unStart || isReject)" type="primary" size="medium" class="auth-btn"
  89. @click="submitForm()">{{ reviewBtnText }}</el-button>
  90. </div>
  91. </div>
  92. </template>
  93. <template v-if="$props.module.carrierFpInfo">
  94. <div class="defbb p-spac">
  95. 开票补充信息<span class="ml-spac p-wcolor" v-if="!isreView">[ 提醒:请先完成“资质审核”!]</span>
  96. </div>
  97. <invoice :disabled="!isreView" :readOnly="false" v-model="carrierFpInfo" class="p-spacd2 p-b-0" />
  98. </template>
  99. <authorize v-model="bindPhone" :carrierBalanceInfo="carrierBalanceInfo" :carrierWithdrawInfo="carrierWithdrawInfo"
  100. :tradeType="tradeType" v-if="$props.module.carrierWithdrawInfo && isreView" />
  101. <review class="w50" :orgId="safeOrgId" v-if="$props.module.review" @feedback="reviewFeedback" />
  102. </div>
  103. </template>
  104. <script>
  105. import UploadImg from 'submodule/components/pc/upload/uploadImg.vue'
  106. import auth from './comp/auth.vue'
  107. import invoice from './comp/invoice.vue'
  108. import authorize from './comp/authorize.vue'
  109. import review from './comp/review.vue'
  110. export default {
  111. name: 'join',
  112. data() {
  113. return {
  114. args: {},
  115. /** 交易模式(1经销模式;2直销模式,默认经销模式1) */
  116. tradeType: 1,
  117. /** 绑定手机号信息 */
  118. bindPhone: '',
  119. /** 企业认证信息 */
  120. carrierAuthInfo: {
  121. /** 营业执照路径 */
  122. businessLicense: '',
  123. /** 认证状态:1=未完成 2=已认证 */
  124. channelAuthStatus: 1,
  125. /** 法人身份证反面照片路径 */
  126. idCardBack: '',
  127. /** 法人身份证正面照片路径 */
  128. idCardFront: '',
  129. /** 法人证件号(身份证号) */
  130. idCardNo: '',
  131. /** 法人姓名 */
  132. legalperson: '',
  133. /** 公司名称 */
  134. orgName: '',
  135. /** 统一社会信用代码(纳税人识别号) */
  136. taxpayer: ''
  137. },
  138. /** 资质审核:道路运输许可证信息 */
  139. carrierRoadInfo: {
  140. /** 审核驳回理由 */
  141. reason: '',
  142. /** 审核记录 */
  143. records: '',
  144. /** 道路运输许可证路径 */
  145. roadTransport: '',
  146. /** 道路运输经营许可证认证状态: 0=未发起(默认)1=待认证 2=已认证 3=已驳回 */
  147. roadTransportStatus: 0
  148. },
  149. /** 开票补充信息 */
  150. carrierFpInfo: {
  151. /** 开票信息:购方地址 */
  152. fpAddress: '',
  153. /** 开票信息:购方开户银行 */
  154. fpBank: '',
  155. /** 开票信息:购方银行账号 */
  156. fpBankAccount: '',
  157. /** 开票信息:购方电话 */
  158. fpPhone: '',
  159. /** 1未保存过,2已保存过 */
  160. fpStatus: 1
  161. },
  162. /** 提现公户信息 */
  163. carrierBankInfo: {
  164. /** 提现公户账号 */
  165. account: '',
  166. /** 开户银行 */
  167. bank: '',
  168. /** 开户行支行 */
  169. bankName: '',
  170. /** 1未上报,2已上报 */
  171. bankStatus: 1,
  172. /** 支行行号 */
  173. unionBank: ''
  174. },
  175. /** 合同签约信息 */
  176. carrierContractInfo: {
  177. /** 签约完成时间 */
  178. contractDate: '',
  179. /** 签约状态 1=未签约 2=已签约 */
  180. contractStatus: 1
  181. },
  182. /** 转账授权 */
  183. carrierBalanceInfo: {
  184. /** undefined */
  185. balanceDate: '',
  186. /** 转账授权:1未授权 2已授权 */
  187. balanceStatus: 1
  188. },
  189. /** 提现授权 */
  190. carrierWithdrawInfo: {
  191. /** 转账授权签约时间 */
  192. withdrawDate: '',
  193. /** 提现授权:1未授权 2已授权 */
  194. withdrawStatus: 1
  195. },
  196. carrierRoadInfoImg: [
  197. {
  198. path: '',
  199. defaultPath: require('@/assets/images/main/license@2x.png'),
  200. text: '上传道路运输经营许可证'
  201. }
  202. ],
  203. rules: {
  204. roadTransport: {
  205. required: true,
  206. message: '请上传道路运输经营许可证',
  207. trigger: 'blur'
  208. }
  209. }
  210. }
  211. },
  212. components: { UploadImg, auth, invoice, authorize, review },
  213. props: {
  214. orgId: {
  215. type: String,
  216. default: ''
  217. },
  218. /** 模块信息 */
  219. module: {
  220. type: Object,
  221. default: () => ({
  222. carrierRoadInfo: {
  223. show: false,
  224. edit: false
  225. },
  226. carrierFpInfo: false,
  227. carrierWithdrawInfo: false,
  228. review: false
  229. })
  230. }
  231. },
  232. computed: {
  233. safeOrgId() {
  234. return this.$props.orgId ||
  235. this.args.orgId
  236. },
  237. // 已认证
  238. isAuth() {
  239. return this.carrierAuthInfo.channelAuthStatus === 2
  240. },
  241. authText() {
  242. return this.isAuth ? '已认证' : '未完成'
  243. },
  244. // 未发起
  245. unStart() {
  246. return this.carrierRoadInfo.roadTransportStatus === 0
  247. },
  248. // 待审核
  249. reViewing() {
  250. return this.carrierRoadInfo.roadTransportStatus === 1
  251. },
  252. // 被驳回
  253. isReject() {
  254. return this.carrierRoadInfo.roadTransportStatus === 3
  255. },
  256. // 已审核
  257. isreView() {
  258. return this.carrierRoadInfo.roadTransportStatus === 2
  259. },
  260. operateState() {
  261. return ['未发起', '待审核', '已认证', '已驳回'][this.carrierRoadInfo.roadTransportStatus]
  262. },
  263. // 营运许可证为查看状态
  264. carrierRoadInfoView() {
  265. return !this.module.carrierRoadInfo.edit || this.reViewing || this.isreView
  266. },
  267. reviewBtnText() {
  268. return this.isReject ? '重新发起审核' : '发起审核'
  269. }
  270. },
  271. created() {
  272. this.getCarrierInfo()
  273. },
  274. methods: {
  275. init(args) {
  276. this.args = args
  277. this.getCarrierInfo()
  278. },
  279. /**
  280. * qualificationReviewFeedback
  281. * @description: 资质审核反馈
  282. * @param {type} 2通过 3驳回 0 取消
  283. * @return: null
  284. */
  285. reviewFeedback(type) {
  286. this.$emit('reviewFeedback', type)
  287. },
  288. getCarrierInfo() {
  289. if (this.safeOrgId) {
  290. this.$http(this.$interfaces.user.get_carrier_info, { orgId: this.safeOrgId }).then(res => {
  291. this.tradeType = res.org.tradeType
  292. this.carrierAuthInfo = res.carrierAuthInfo
  293. this.carrierBalanceInfo = res.carrierBalanceInfo
  294. this.carrierBankInfo = res.carrierBankInfo
  295. this.carrierContractInfo = res.carrierContractInfo
  296. this.carrierFpInfo = res.carrierFpInfo
  297. this.carrierRoadInfo = res.carrierRoadInfo
  298. this.carrierWithdrawInfo = res.carrierWithdrawInfo
  299. })
  300. }
  301. },
  302. uploadOrgPic(path) {
  303. this.carrierRoadInfo.roadTransport = path
  304. // this.carrierRoadInfo.roadTransport = process.env.VUE_APP_FILE_URL + path
  305. },
  306. submitForm() {
  307. this.$refs.carrierRoadInfo.validate((valid) => {
  308. if (valid) {
  309. this.$http(this.$interfaces.user.road_transport_up, {
  310. picPath: this.carrierRoadInfo.roadTransport
  311. }).then(res => {
  312. this.carrierRoadInfo.roadTransportStatus = 1
  313. })
  314. }
  315. })
  316. }
  317. }
  318. }
  319. </script>
  320. <style lang="scss" scoped>
  321. @import "submodule/utils/style/variables.scss";
  322. .abs-rt {
  323. position: absolute;
  324. right: $p-spac;
  325. top: $p-spac;
  326. }
  327. .small-img {
  328. width: 216px;
  329. height: 140px;
  330. }
  331. .big-img {
  332. width: 340px;
  333. height: 220px;
  334. }
  335. </style>