公众号项目
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.

653 lines
18 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <template>
  2. <view>
  3. <view class="home-pages">
  4. <view
  5. style="position: absolute;top: 0; left: 0; height: 188rpx; width: 100%; z-index: 100; background-color: #FFFFFF; box-shadow: 0px 15px 10px -15px #E8E8E8;">
  6. <view style="margin: 28rpx 24rpx; display: flex;" @click="newDetail()">
  7. <image :showLoading="true" :src="userInfo?userInfo.headImage : morenSrc"
  8. style="width: 148rpx;height: 148rpx;border-radius: 50%;"></image>
  9. <view style="padding: 28rpx;">
  10. <view style="font-size: 32rpx;font-weight: 600">{{userInfo?userInfo.nickName: '点击登录'}}</view>
  11. <view style="margin-top: 30rpx;font-size: 28rpx;font-weight: 500">不积跬步 无以至千里</view>
  12. </view>
  13. <view style="padding: 28rpx;">
  14. <view style="font-size: 30rpx;font-weight: 500">订阅记录 ></view>
  15. </view>
  16. </view>
  17. </view>
  18. <view class="home-content">
  19. <view class="pay-btn-2" @click="seeDetail()">
  20. <view style="margin-right: 110rpx;">刊物介绍</view>
  21. <!-- <span ></span> -->
  22. </view>
  23. <view style="margin: 10rpx; font-weight: 200;">
  24. <span>订阅申请</span>
  25. </view>
  26. <view class="from">
  27. <view class="from-line">
  28. <span class="label-class" style="margin-top: 20rpx;">姓名:</span>
  29. <view><input style="margin-top: 20rpx;border-bottom: 1px solid #ccc;" v-model="release.userName" placeholder="请输入学生姓名" /></view>
  30. </view>
  31. <view class="from-line">
  32. <span class="label-class">电话:</span>
  33. <view><input type="number" style="border-bottom: 1px solid #ccc;" v-model="release.mobilePhone" placeholder="请输入手机号码" /></view>
  34. </view>
  35. <view class="from-line" >
  36. <span class="label-class">省份:</span>
  37. <view class="uni-list-cell-left" >
  38. <picker @change="selectedSf" :range="provinceNames" range-key="name" >
  39. <!-- {{release.provinceName ? release.provinceName:"请选择省份"}} -->
  40. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  41. <spen >{{release.provinceName?release.provinceName:'请选择省份'}}</spen>
  42. </view>
  43. <!-- <spen :readonly="true" v-model="release.provinceName" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择省份" >
  44. </spen> -->
  45. </picker>
  46. </view>
  47. </view>
  48. <view class="from-line">
  49. <span class="label-class">区域:</span>
  50. <view class="uni-list-cell-left">
  51. <picker @change="selectedQy" :range="regionNames" range-key="name">
  52. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  53. <spen >{{release.regionName?release.regionName:'请选择区域'}}</spen>
  54. </view>
  55. <!-- <input :readonly="true" v-model="release.regionName" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择区域" /> -->
  56. </picker>
  57. </view>
  58. </view>
  59. <view class="from-line">
  60. <span class="label-class">学历:</span>
  61. <view class="uni-list-cell-left">
  62. <picker @change="selectedXl" :range="schoolTypes">
  63. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  64. <spen >{{release.schoolType?release.schoolType:'请选择学历'}}</spen>
  65. </view>
  66. <!-- <input :readonly="true" v-model="release.schoolType" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择学历" /> -->
  67. </picker>
  68. </view>
  69. </view>
  70. <view class="from-line">
  71. <span class="label-class">学校:</span>
  72. <view class="uni-list-cell-left">
  73. <picker @change="selectedXx" :range="schoolNames" range-key="name">
  74. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  75. <spen >{{release.schoolName?release.schoolName:'请选择学校'}}</spen>
  76. </view>
  77. <!-- <input :readonly="true" v-model="release.schoolName" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择学校" /> -->
  78. </picker>
  79. </view>
  80. <!-- <view><input v-model="release.schoolName" placeholder="请选择学校" /></view> -->
  81. </view>
  82. <view class="from-line">
  83. <span class="label-class">年级:</span>
  84. <view class="uni-list-cell-left">
  85. <picker @change="selectedNj" :range="gradeNames" range-key="name">
  86. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  87. <spen >{{release.gradeName?release.gradeName:'请选择年级'}}</spen>
  88. </view>
  89. <!-- <input :readonly="true" v-model="release.gradeName" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择年级 " /> -->
  90. </picker>
  91. </view>
  92. <!-- <view><input v-model="release.gradeName" placeholder="请选择年级" /></view> -->
  93. </view>
  94. <view class="from-line">
  95. <span class="label-class">班级:</span>
  96. <view class="uni-list-cell-left">
  97. <picker @change="selectedBj" :range="classNames" range-key="name">
  98. <view style="font-weight: bold;font-size: 20;color: #000;margin-top: 20rpx;">
  99. <spen >{{release.className?release.className:'请选择班级'}}</spen>
  100. </view>
  101. <!-- <input :readonly="true" v-model="release.className" style="font-weight: bold;font-size: 20;color: #000;" placeholder="请选择班级" /> -->
  102. </picker>
  103. </view>
  104. <!-- <view><input v-model="release.className" placeholder="请选择班级" /></view> -->
  105. </view>
  106. <view class="home-modal" v-show="showj == true">
  107. <!-- :class="{'active': release.topid === item.id}" -->
  108. <view class="title">订阅项目</view>
  109. <view v-for="(item,index) in dianList" @click='clickLable(index)' class="label-class" :class="{'active': item.selected === true}">
  110. {{item.price}} {{item.name}}</view>
  111. </view>
  112. </view>
  113. <view class="pay-btn" @click="getCreteClick()">
  114. 提交申请
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. </template>
  120. <script>
  121. export default {
  122. data() {
  123. return {
  124. isChecked: false,
  125. morenSrc: require('@/static/img/logon-icon.png'),
  126. userInfo: null,
  127. showj: false,
  128. provinceNames:[],
  129. regionNames:[],
  130. schoolTypes: ['小学', '初中', '高中'],
  131. schoolNames:[],
  132. dianList:[],
  133. selectId: [],
  134. gradeNames:[],
  135. classNames:[],
  136. clicked:false,
  137. vsc: [
  138. ['广东省', '湖南省'],
  139. ['怀山区', '广州区']
  140. ],
  141. release: {
  142. userName: "",
  143. mobilePhone: "",
  144. vsClass: "",
  145. provinceName:"",
  146. regionName:"",
  147. schoolType: "",
  148. schoolName: "",
  149. gradeName: "",
  150. className: "",
  151. items: "",
  152. totalPrice: 0.00,
  153. schoolType: "",
  154. topid: ""
  155. }
  156. }
  157. },
  158. onShow() {
  159. this.getmyInfo();
  160. this.getProvinceNameList();
  161. // this.getYerList();
  162. this.getClassList();
  163. },
  164. onLoad() {
  165. },
  166. // 隐藏微信h5的标题栏
  167. onReady() {
  168. this.$com.displayNav()
  169. },
  170. methods: {
  171. // stopKeyborad () {
  172. // this.$refs.scanTextbox.setAttribute('readonly', 'readonly');
  173. // setTimeout(() => {
  174. // this.$refs.scanTextbox.removeAttribute('readonly');
  175. // }, 200);
  176. // },
  177. //获取省
  178. getProvinceNameList(){
  179. this.$api('getProvinceNameList', {}).then(res => {
  180. if(res.code == 200){
  181. this.provinceNames =res.result;
  182. }
  183. })
  184. },
  185. //获取区域
  186. getRegionNameList(provinceName){
  187. this.$api('getRegionNameList', {"provinceName":provinceName}).then(res => {
  188. console.log("---")
  189. console.log(res)
  190. if(res.code == 200){
  191. this.regionNames = res.result;
  192. console.log("regionNames2")
  193. console.log(this.regionNames)
  194. }
  195. })
  196. console.log("regionNames")
  197. console.log(this.regionNames)
  198. },
  199. //获取学校
  200. getSchoolList(provinceName,regionName,schoolType){
  201. this.$api('getSchoolList',
  202. {
  203. "provinceName":provinceName,
  204. "regionName":regionName,
  205. "schoolType":schoolType,
  206. }).then(res => {
  207. if(res.code == 200){
  208. this.schoolNames =res.result;
  209. }
  210. })
  211. },
  212. //获取订阅信息
  213. getDinList(provinceName,regionName,schoolType,schoolName,gradeName){
  214. this.$api('getDinList',
  215. {
  216. "provinceName":provinceName,
  217. "regionName":regionName,
  218. "schoolType":schoolType,
  219. "schoolName":schoolName,
  220. "gradeName":gradeName,
  221. }).then(res => {
  222. if(res.code == 200){
  223. this.dianList =res.result;
  224. }
  225. })
  226. },
  227. //获取订阅信息
  228. getYerList(schoolType){
  229. this.$api('getYerList',
  230. {
  231. "schoolType":schoolType,
  232. }).then(res => {
  233. if(res.code == 200){
  234. this.gradeNames =res.result;
  235. }
  236. })
  237. },
  238. //获取订阅信息
  239. getClassList(){
  240. this.$api('getClassList',
  241. {
  242. }).then(res => {
  243. if(res.code == 200){
  244. this.classNames =res.result;
  245. }
  246. })
  247. },
  248. // 单个复选框事件
  249. checkboxChange(e) {
  250. let values = e.detail.value;
  251. if (values[0] == 1) {
  252. this.isChecked = true;
  253. } else {
  254. this.isChecked = false;
  255. }
  256. },
  257. //提交创建订单
  258. createOrder() {
  259. },
  260. getmyInfo() {
  261. this.$api('myInfo')
  262. .then(res => {
  263. if (res.code == 200) {
  264. this.role = res.result.role;
  265. this.userInfo = res.result;
  266. this.$store.commit('set_userInfo', res.result)
  267. } else {
  268. this.userInfo = null
  269. }
  270. if (!this.userInfo) {
  271. uni.navigateTo({
  272. url: "/pages/my/login-kehu"
  273. })
  274. }
  275. })
  276. },
  277. //跳转刊物介绍
  278. seeDetail() {
  279. if (!this.userInfo) {
  280. uni.navigateTo({
  281. url: "/pages/my/login-kehu"
  282. })
  283. } else {
  284. uni.navigateTo({
  285. url: "/pages/my/kanwus"
  286. })
  287. }
  288. },
  289. getCreteClick() {
  290. let that = this;
  291. if(that.clicked == true){
  292. this.$Toast('请不要重复提交!');
  293. setTimeout(()=>{
  294. that.clicked = false;
  295. },1500)
  296. return
  297. }
  298. that.clicked = true;
  299. this.$api('createShopOrder', {
  300. "userName": this.release.userName,
  301. "mobilePhone": this.release.mobilePhone,
  302. "provinceName": this.release.provinceName,
  303. "regionName": this.release.regionName,
  304. "schoolType": this.release.schoolType,
  305. "schoolName": this.release.schoolName,
  306. "gradeName": this.release.gradeName,
  307. "className": this.release.className,
  308. "items": this.release.items,
  309. // "totalPrice": this.release.totalPrice,
  310. })
  311. .then(res => {
  312. if(res.code == 500){
  313. this.$Toast(res.message)
  314. }
  315. if (res.code == 200) {
  316. that.$api('create', {
  317. id: res.result.id
  318. })
  319. .then(res => {
  320. console.log(res)
  321. that.$jweixin.config({
  322. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  323. appId: 'wx77fe1fcd6471ecbe', // 必填,公众号的唯一标识
  324. timestamp: res.result.timestamp, // 必填,生成签名的时间戳
  325. nonceStr: res.result.noncestr, // 必填,生成签名的随机串
  326. signature: res.result.sgture, // 必填,签名
  327. jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
  328. 'onMenuShareTimeline', 'onMenuShareAppMessage',
  329. 'chooseWXPay'
  330. ]
  331. });
  332. that.$jweixin.chooseWXPay({
  333. appId: 'wx77fe1fcd6471ecbe',
  334. timestamp: res.result
  335. .timeStamp, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
  336. nonceStr: res.result.nonceStr, // 支付签名随机串,不长于 32 位
  337. package: res.result
  338. .packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  339. signType: res.result
  340. .signType, // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致
  341. paySign: res.result.paySign, // 支付签名
  342. success: function(res) {
  343. that.erop = true;
  344. that.clicked = false;
  345. uni.navigateTo({
  346. url: "/pages/my/orders"
  347. })
  348. }
  349. });
  350. })
  351. }
  352. })
  353. },
  354. //跳转订阅记录
  355. newDetail() {
  356. console.log(":============订阅")
  357. if (!this.userInfo) {
  358. uni.navigateTo({
  359. url: "/pages/my/login-kehu"
  360. })
  361. } else {
  362. console.log(":============订阅订单")
  363. uni.navigateTo({
  364. url: "/pages/my/orders"
  365. })
  366. }
  367. },
  368. lower() {
  369. },
  370. //省份
  371. selectedSf(event) {
  372. console.log(event.detail.value)
  373. // if (event.detail.value) {
  374. this.release.provinceName = this.provinceNames[event.detail.value].name
  375. // }
  376. //清空值
  377. this.release.regionName = "";
  378. this.release.schoolType = "";
  379. this.release.schoolName = "";
  380. this.release.gradeName = "";
  381. //得到区域
  382. this.getRegionNameList(this.release.provinceName);
  383. },
  384. //区域
  385. selectedQy(event) {
  386. // if (event.detail.value) {
  387. this.release.regionName = this.regionNames[event.detail.value].name
  388. this.release.schoolType = "";
  389. this.release.schoolName = "";
  390. this.release.gradeName = "";
  391. // }
  392. },
  393. //学历
  394. selectedXl(event) {
  395. // if (event.detail.value) {
  396. this.release.schoolType = this.schoolTypes[event.detail.value]
  397. this.getSchoolList(this.release.provinceName,this.release.regionName,this.release.schoolType);
  398. this.getYerList(this.release.schoolType);
  399. this.release.schoolName = "";
  400. this.release.gradeName = "";
  401. // }
  402. },
  403. //学校
  404. selectedXx(event) {
  405. // if (event.detail.value) {
  406. this.release.schoolName = this.schoolNames[event.detail.value].name
  407. // }
  408. },
  409. selectedNj(event) {
  410. // if (event.detail.value) {
  411. this.release.gradeName = this.gradeNames[event.detail.value].name
  412. this.getDinList(this.release.provinceName,this.release.regionName,this.release.schoolType,this.release.schoolName,this.release.gradeName);
  413. this.showj = true
  414. // }
  415. },
  416. selectedBj(event) {
  417. console.log(event.detail.value)
  418. // if (event.detail.value) {
  419. this.release.className = this.classNames[event.detail.value].name
  420. // }
  421. },
  422. selectedVs(event) {
  423. if (event.type === 'columnchange') {
  424. if (event.detail.column === 0) {
  425. const value = this.vsc[event.detail.column][event.detail.value];
  426. console.log("选中:" + value);
  427. if (1 === event.detail.value) {
  428. this.vsc[1] = ["永州教育区", "长沙教育区"]
  429. }
  430. }
  431. } else {
  432. if (event.detail) {
  433. this.release.vsClass = ""
  434. event.detail.value.forEach((v, k) => {
  435. this.release.vsClass += (this.vsc[k][v] + " ");
  436. })
  437. }
  438. }
  439. },
  440. clickLable(index) {
  441. // this.release.topid = item.id
  442. // this.release.subItems = item.name
  443. // this.release.totalPrice = item.price
  444. let ids = "";
  445. if (this.dianList[index].selected == true) {
  446. this.dianList[index].selected = false;
  447. //取消选中时删除数组中的值
  448. for (var i = 0; i < this.selectId.length; i++) {
  449. if (this.selectId[i] === this.dianList[index].id) {
  450. this.selectId.splice(i, 1);
  451. }
  452. }
  453. console.log("选中的值", this.selectId)
  454. } else {
  455. this.dianList[index].selected = true;
  456. this.selectId.push(this.dianList[index].id)
  457. console.log("选中的值", this.selectId)
  458. }
  459. this.release.items = this.selectId;
  460. }
  461. }
  462. }
  463. </script>
  464. <style lang="scss" scoped>
  465. .home-content {
  466. .from {
  467. margin-top: 20rpx;
  468. background-color: #F7F7F7;
  469. }
  470. .from-line {
  471. height: 108rpx;
  472. display: flex;
  473. background-color: #FFFFFF;
  474. .label-class {
  475. text-align: justify;
  476. text-align-last: justify;
  477. line-height: 68rpx;
  478. width: 138rpx;
  479. padding: 0 24rpx;
  480. }
  481. input {
  482. padding-left: 10rpx;
  483. height: 68rpx;
  484. }
  485. }
  486. .from-line-box {
  487. background-color: #FFFFFF;
  488. height: 328rpx;
  489. margin-right: 50rpx;
  490. display: flex;
  491. .label-class {
  492. text-align: justify;
  493. text-align-last: justify;
  494. line-height: 128rpx;
  495. width: 168rpx;
  496. padding: 0 24rpx;
  497. }
  498. input {
  499. padding-left: 20rpx;
  500. }
  501. }
  502. .pay-btn {
  503. text-align: center;
  504. border-radius: 12rpx;
  505. line-height: 78rpx;
  506. background-color: #00CCCC;
  507. color: #FFFFFF;
  508. }
  509. .pay-btn-2 {
  510. margin: 10rpx auto;
  511. text-align: left;
  512. border-radius: 12rpx;
  513. height: 78rpx;
  514. font-weight: 200rpx;
  515. line-height: 78rpx;
  516. font-size: 48;
  517. background-color: #FFFFFF;
  518. }
  519. }
  520. .home-pages {
  521. padding: 188rpx 10rpx 0;
  522. background-color: #F7F7F7;
  523. .scroll-Y {
  524. height: calc(100vh - 200rpx);
  525. padding-top: 20rpx;
  526. }
  527. }
  528. .home-modal {
  529. width: 100vw;
  530. min-height: 20vh;
  531. .title {
  532. line-height: 100rpx;
  533. margin-top: 40rpx;
  534. background-color: #FFF;
  535. }
  536. .label-class {
  537. line-height: 100rpx;
  538. padding: 0 26rpx;
  539. background-color: #FFF;
  540. position: relative;
  541. }
  542. .label-class::after {
  543. content: "";
  544. width: 30rpx;
  545. height: 30rpx;
  546. border-radius: 50%;
  547. border: 1rpx solid #888;
  548. position: absolute;
  549. right: 36rpx;
  550. top: calc((100rpx - 32rpx) / 2);
  551. }
  552. .label-class.active::after {
  553. background-color: #544AFF;
  554. border-color: #544AFF;
  555. }
  556. .label-class.active::before {
  557. background-color: #FFF;
  558. border: none;
  559. content: ' ';
  560. width: 12rpx;
  561. height: 12rpx;
  562. border-radius: 50%;
  563. z-index: 1;
  564. position: absolute;
  565. top: calc((100rpx - 12rpx) / 2);
  566. right: 46rpx;
  567. }
  568. }
  569. </style>