合同小程序前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

405 lines
10 KiB

  1. <template>
  2. <view class="containers">
  3. <view class="header">
  4. <view class="header_info">
  5. <uni-icons class="header_info_icon" type="left" size="30" color="#c2d4de" @click.native.stop.prevent="toBack"></uni-icons>
  6. <text class="header_text">付款信息</text>
  7. </view>
  8. </view>
  9. <view class="idCard-box">
  10. <view class="reverse">
  11. <image :src="upLoadPositiveImg == ''?positiveImg:upLoadPositiveImg" @tap.prevent="uploadPositive">
  12. </image>
  13. </view>
  14. <view class="reverse">
  15. <image :src="upLoadReverseImg == ''?reverseImg:upLoadReverseImg" @tap.prevent="uploadReverse">
  16. </image>
  17. </view>
  18. <view class="reverse">
  19. <image :src="upLoadCarImg == ''?carImg:upLoadCarImg" @tap.prevent="uploadReverse">
  20. </image>
  21. </view>
  22. </view>
  23. <!-- 客户基本信息 -->
  24. <view class="section">
  25. <view class="con_size">
  26. <image src="/static/image/矩形 5315.png" class='con_size_img' ></image>
  27. 客户基本信息
  28. </view>
  29. <view class="form-item">
  30. <text class="label">产品名称</text>
  31. <text class="value">{{ selectedProduct }}</text>
  32. </view>
  33. <view class="form-item">
  34. <text class="label">经销商</text>
  35. <text class="value">{{ selectedStore }}</text>
  36. </view>
  37. <view class="form-item">
  38. <text class="label">客户姓名</text>
  39. <input class="input" v-model="clientInfo.name" placeholder="请输入客户姓名" />
  40. </view>
  41. <view class="form-item">
  42. <text class="label">居住地址</text>
  43. <input class="input" v-model="clientInfo.address" placeholder="请输入居住地址" />
  44. </view>
  45. <view class="form-item">
  46. <text class="label">身份证号码</text>
  47. <input class="input" v-model="clientInfo.idNumber" placeholder="请输入身份证号码" />
  48. </view>
  49. <view class="form-item">
  50. <text class="label">联系方式</text>
  51. <input class="input" v-model="clientInfo.contact" placeholder="请输入联系方式" />
  52. </view>
  53. <view class="form-item">
  54. <text class="label">销售部门</text>
  55. <l-radio-group class="radio-group" @change="handleDepartmentChange">
  56. <label class="radio-label" v-for="item in departments" :key="item">
  57. <l-radio :value="item" :checked="clientInfo.department === item" >
  58. <template #icon="{checked}">
  59. <image v-show="checked" style="width:1.2rem; height:1.2rem;" src="/static/image/xuanzhong.png"></image>
  60. <image v-show="!checked" style="width:1.2rem; height:1.2rem" src="/static/image/weixuanzhong.png"></image>
  61. </template>
  62. </l-radio>
  63. <text style="margin-left:0.2rem;">{{ item }}</text>
  64. </label>
  65. </l-radio-group>
  66. </view>
  67. <view class="form-item">
  68. <text class="label">促销销售顾问</text>
  69. <input class="input" v-model="clientInfo.salesAdvisor" placeholder="请输入店铺销售顾问" />
  70. </view>
  71. </view>
  72. <!-- 车辆信息 -->
  73. <view class="section">
  74. <view class="con_size">
  75. <image src="/static/image/矩形 5315.png" class='con_size_img' ></image>车辆信息</view>
  76. <view class="form-item">
  77. <text class="label">车牌车系</text>
  78. <picker class="picker" @change="bindCarBrandChange" :value="carBrandIndex" :range="carBrands">
  79. <view class="picker-text">{{ carBrands[carBrandIndex] || '请选择车辆品牌 >' }}</view>
  80. </picker>
  81. </view>
  82. <view class="form-item">
  83. <text class="label">车牌号</text>
  84. <input class="input" v-model="vehicleInfo.plateNumber" placeholder="456123351" />
  85. </view>
  86. </view>
  87. <!-- 产品描述 -->
  88. <view class="section">
  89. <view class="con_size">
  90. <image src="/static/image/矩形 5315.png" class='con_size_img' ></image>产品描述</view>
  91. <view class="form-item">
  92. <text class="label">产品名称</text>
  93. <text class="value">{{ selectedService }}</text>
  94. </view>
  95. <view class="form-item">
  96. <text class="label">服务年龄</text>
  97. <picker class="picker" @change="bindServiceAgeChange" :value="serviceAgeIndex" :range="serviceAges">
  98. <view class="picker-text">{{ serviceAges[serviceAgeIndex] || '请选择服务年龄 >' }}</view>
  99. </picker>
  100. </view>
  101. <view class="form-item">
  102. <text class="label">销售金额</text>
  103. <input class="input" v-model="productInfo.salesAmount" placeholder="请输入销售金额" />
  104. </view>
  105. </view>
  106. <!-- 付款信息 -->
  107. <view class="section">
  108. <view class="con_size">
  109. <image src="/static/image/矩形 5315.png" class='con_size_img' ></image>付款信息</view>
  110. <view class="form-item">
  111. <text class="label">收款方</text>
  112. <picker class="picker" @change="bindPayeeChange" :value="payeeIndex" :range="payees">
  113. <view class="picker-text">{{ payees[payeeIndex] || '请选择收款方 >' }}</view>
  114. </picker>
  115. </view>
  116. <view class="form-item">
  117. <text class="label">付款时间</text>
  118. <uni-datetime-picker class="timePiker" type="datetime" v-model="paymentInfo.paymentTime" :clear-icon="false" :border="false">
  119. </uni-datetime-picker>
  120. </view>
  121. </view>
  122. </view>
  123. </template>
  124. <script>
  125. export default {
  126. data() {
  127. return {
  128. selectedProduct: "自动填写所选商品服务分类",
  129. selectedStore: "自动填写所选择的门店",
  130. selectedService: "自动填写所选择的服务分类",
  131. clientInfo: {
  132. name: '',
  133. address: '',
  134. idNumber: '',
  135. contact: '',
  136. department: '',
  137. salesAdvisor: ''
  138. },
  139. vehicleInfo: {
  140. plateNumber: '456123351'
  141. },
  142. productInfo: {
  143. salesAmount: ''
  144. },
  145. paymentInfo: {
  146. paymentTime: ''
  147. },
  148. departments: ['售前', '售后', '二网车'],
  149. carBrands: ['品牌A', '品牌B', '品牌C'],
  150. carBrandIndex: -1,
  151. serviceAges: ['1年', '2年', '3年'],
  152. serviceAgeIndex: -1,
  153. payees: ['收款方A', '收款方B', '收款方C'],
  154. payeeIndex: -1,
  155. // 扫描
  156. positiveImg: '/static/image/组件 4 – 1.png',//自己图片路径
  157. upLoadPositiveImg: '',
  158. // 反面身份证
  159. reverseImg: '/static/image/组 71663.png', //自己图片路径
  160. upLoadReverseImg: '',
  161. // 行车驾驶证
  162. carImg: '/static/image/组件 2 – 1.png', //自己图片路径
  163. upLoadCarImg: '',
  164. baidu_token:' '//百度token
  165. }
  166. },
  167. methods: {
  168. toBack(){
  169. let canNavBack = getCurrentPages()
  170. if( canNavBack && canNavBack.length>1) {
  171. uni.navigateBack()
  172. } else {
  173. history.back();
  174. }
  175. },
  176. handleDepartmentChange(e) {
  177. this.clientInfo.department = e.detail.value
  178. },
  179. bindCarBrandChange(e) {
  180. this.carBrandIndex = e.detail.value
  181. },
  182. bindServiceAgeChange(e) {
  183. this.serviceAgeIndex = e.detail.value
  184. },
  185. bindPayeeChange(e) {
  186. this.payeeIndex = e.detail.value
  187. },
  188. // file文件转base64
  189. getImageBase64(blob) {
  190. return new Promise((resolve, reject) => {
  191. const reader = new FileReader();
  192. reader.readAsDataURL(blob);
  193. reader.onload = () => {
  194. const base64 = reader.result;
  195. resolve(base64);
  196. }
  197. reader.onerror = error => reject(error);
  198. });
  199. },
  200. // 身份证正面上传
  201. uploadPositive() {
  202. uni.chooseImage({
  203. count: 1,
  204. sizeType: ['original', 'compressed'],
  205. sourceType: ['album', 'camera'],
  206. success: (res) => {
  207. this.upLoadPositiveImg = res.tempFilePaths[0]
  208. this.getImageBase64(res.tempFiles[0]).then(res => {
  209. this.uploadIdentify(res)
  210. })
  211. }
  212. })
  213. },
  214. // 身份证反面上传
  215. uploadReverse() {
  216. uni.chooseImage({
  217. count: 1,
  218. sizeType: ['original', 'compressed'],
  219. sourceType: ['album', 'camera'],
  220. success: (res) => {
  221. this.upLoadReverseImg = res.tempFilePaths[0]
  222. this.getImageBase64(res.tempFiles[0]).then(res => {
  223. this.uploadIdentify(res)
  224. })
  225. }
  226. })
  227. },
  228. // 获取百度token
  229. getACSS_TOKEN() {
  230. let that = this
  231. uni.request({
  232. // url: '/baiduApi/oauth/2.0/token',
  233. url: 'https://aip.baidubce.com/oauth/2.0/token',
  234. method: 'POST',
  235. data: {
  236. grant_type: 'client_credentials',
  237. client_id: '你的',
  238. client_secret: '你的',
  239. },
  240. header: {
  241. 'Content-Type': 'application/x-www-form-urlencoded'
  242. },
  243. success: res => {
  244. this.baidu_token = res.data.access_token
  245. }
  246. });
  247. },
  248. // 上传识别
  249. uploadIdentify(res) {
  250. uni.request({
  251. url: '/baiduApi/rest/2.0/ocr/v1/idcard?access_token=' + this.baidu_token,
  252. method: 'POST',
  253. data: {
  254. image: res,
  255. id_card_side: 'back' // 身份证 正反面 front:身份证含照片的一面 back:身份证带国徽的一面
  256. },
  257. header: {
  258. 'Content-Type': 'application/x-www-form-urlencoded'
  259. },
  260. success: res => {
  261. console.log(res.data)
  262. }
  263. })
  264. },
  265. }
  266. }
  267. </script>
  268. <style scoped lang="scss">
  269. .containers {
  270. height: 100%;
  271. width: 100%;
  272. background-color: #fff;
  273. overflow-y:scroll;
  274. }
  275. .container::-webkit-scrollbar {
  276. display: none;
  277. }
  278. .section {
  279. // margin-bottom: 30rpx;
  280. border-bottom: 1rpx solid #eee;
  281. margin: 0 1rem 0 1rem;
  282. }
  283. .form-item {
  284. display: flex;
  285. flex-direction: row;
  286. justify-content: space-between;
  287. align-items: center;
  288. padding: 0.5rem 0;
  289. border-bottom: 0.1rem solid #f2f2f2;
  290. color: #767676;
  291. }
  292. .label {
  293. font-size: 28rpx;
  294. color: #666;
  295. width: 200rpx;
  296. }
  297. .input {
  298. flex: 1;
  299. text-align: right;
  300. font-size: 28rpx;
  301. color: #737373;
  302. }
  303. .picker {
  304. flex: 1;
  305. }
  306. .picker-text {
  307. text-align: right;
  308. color: #737373;
  309. font-size: 0.8rem;
  310. }
  311. .radio-group {
  312. display: flex;
  313. flex: 1;
  314. justify-content: flex-end;
  315. flex-direction: row;
  316. }
  317. .radio-label {
  318. padding: 0;
  319. margin-left: 10rpx;
  320. display: flex;
  321. flex-direction: row;
  322. font-size: 1rem;
  323. transform: scale(0.7);
  324. }
  325. .value {
  326. flex: 1;
  327. text-align: right;
  328. color: #737373;
  329. }
  330. .timePiker{
  331. display: flex;
  332. justify-content: center;
  333. /* align-items: center; */
  334. color: #3f3f3f;
  335. }
  336. .idCard-box {
  337. margin-top: 10%;
  338. width: 100%;
  339. height: 50%;
  340. display: flex;
  341. flex-direction: row;
  342. /* background-color: red; */
  343. flex-wrap: wrap;
  344. .reverse {
  345. height: 30%;
  346. width: 40%;
  347. display: flex;
  348. align-items: center;
  349. justify-content: center;
  350. // background-color: blue;
  351. margin: 0 5% 0 5%;
  352. image {
  353. width: 100%;
  354. height: 100%;
  355. }
  356. }
  357. }
  358. /* 表单分区样式 */
  359. .con_size {
  360. font-size: 1rem;
  361. font-weight: bold;
  362. margin: 1rem 0;
  363. color: #000000;
  364. display: flex;
  365. flex-direction: row;
  366. }
  367. .con_size_img{
  368. height: 100%;
  369. width: 2%;
  370. margin-right: 2%;
  371. }
  372. </style>