no message
Showing
42 changed files
with
4105 additions
and
183 deletions
| ... | @@ -5,7 +5,7 @@ import { | ... | @@ -5,7 +5,7 @@ import { |
| 5 | import * as api from '@/common/api.js'; | 5 | import * as api from '@/common/api.js'; |
| 6 | import config from '@/config.js'; | 6 | import config from '@/config.js'; |
| 7 | 7 | ||
| 8 | let loginUrl=['pages/index/login', 'pages/index/register'] | 8 | let loginUrl=['login/login', 'login/register'] |
| 9 | let firstload = false | 9 | let firstload = false |
| 10 | export default { | 10 | export default { |
| 11 | onLaunch: function(options) { | 11 | onLaunch: function(options) { |
| ... | @@ -27,13 +27,13 @@ export default { | ... | @@ -27,13 +27,13 @@ export default { |
| 27 | }) | 27 | }) |
| 28 | .catch(() => { | 28 | .catch(() => { |
| 29 | uni.redirectTo({ | 29 | uni.redirectTo({ |
| 30 | url: '/pages/index/login' | 30 | url: '/login/login' |
| 31 | }) | 31 | }) |
| 32 | }) | 32 | }) |
| 33 | } else { | 33 | } else { |
| 34 | this.globalData.isLogin = false; | 34 | this.globalData.isLogin = false; |
| 35 | uni.redirectTo({ | 35 | uni.redirectTo({ |
| 36 | url: '/pages/index/login' | 36 | url: '/login/login' |
| 37 | }) | 37 | }) |
| 38 | } | 38 | } |
| 39 | } | 39 | } | ... | ... |
| ... | @@ -738,7 +738,204 @@ function cancelMerge(id) { | ... | @@ -738,7 +738,204 @@ function cancelMerge(id) { |
| 738 | url: '/exam/info/cancelMerge/' + id, | 738 | url: '/exam/info/cancelMerge/' + id, |
| 739 | method: 'post' | 739 | method: 'post' |
| 740 | }) | 740 | }) |
| 741 | } | 741 | } |
| 742 | function getInfoModRange(params) { | ||
| 743 | return request({ | ||
| 744 | url: `/person/infoModRange/list`, | ||
| 745 | method: 'get', | ||
| 746 | params:params | ||
| 747 | }) | ||
| 748 | } | ||
| 749 | function addInfoModeList(data) { | ||
| 750 | return request({ | ||
| 751 | url: `/person/infoMod/list`, | ||
| 752 | method: 'get', | ||
| 753 | params: data | ||
| 754 | }) | ||
| 755 | } | ||
| 756 | function infoMod(ids) { | ||
| 757 | return request({ | ||
| 758 | url: `/person/infoMod/${ids}`, | ||
| 759 | method: 'delete' | ||
| 760 | }) | ||
| 761 | } | ||
| 762 | function commitPersonalChange(ids) { | ||
| 763 | return request({ | ||
| 764 | url: `/person/infoModRange/commit/${ids}`, | ||
| 765 | method: 'post' | ||
| 766 | }) | ||
| 767 | } | ||
| 768 | function delPersonalChange(ids) { | ||
| 769 | return request({ | ||
| 770 | url: `/person/infoModRange/${ids}`, | ||
| 771 | method: 'delete' | ||
| 772 | }) | ||
| 773 | } | ||
| 774 | function addInfoModeToRange(data) { | ||
| 775 | return request({ | ||
| 776 | url: `/person/infoMod/addInfoModeToRange/${data.perIds}?rangeIdStr=${data.rangeIdStr}`, | ||
| 777 | method: 'post' | ||
| 778 | }) | ||
| 779 | } | ||
| 780 | function addGroupInfoModeToRange(data) { | ||
| 781 | return request({ | ||
| 782 | url: `/member/infoMod/addInfoModeToRange/${data.memId}?rangeIdStr=${data.rangeIdStr}`, | ||
| 783 | method: 'post' | ||
| 784 | }) | ||
| 785 | } | ||
| 786 | function personChangeEditMod(data) { | ||
| 787 | return request({ | ||
| 788 | url: `/person/infoMod/editMod`, | ||
| 789 | method: 'post', | ||
| 790 | params: data | ||
| 791 | }) | ||
| 792 | } | ||
| 793 | function groupChangeEditMod(data) { | ||
| 794 | return request({ | ||
| 795 | url: `/member/infoMod/editMod`, | ||
| 796 | method: 'post', | ||
| 797 | params: data | ||
| 798 | }) | ||
| 799 | } | ||
| 800 | function personChangeWithDraw(ids) { | ||
| 801 | return request({ | ||
| 802 | url: `/person/infoModRange/withDraw/${ids}`, | ||
| 803 | method: 'post' | ||
| 804 | }) | ||
| 805 | } | ||
| 806 | function personChangeAudit(data) { | ||
| 807 | return request({ | ||
| 808 | url: `/person/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`, | ||
| 809 | method: 'post' | ||
| 810 | }) | ||
| 811 | } | ||
| 812 | function groupChangeAudit(data) { | ||
| 813 | return request({ | ||
| 814 | url: `/member/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`, | ||
| 815 | method: 'post' | ||
| 816 | }) | ||
| 817 | } | ||
| 818 | function pickUpByPersonInfo(form) { | ||
| 819 | return request({ | ||
| 820 | url: `/person/technology/getPersonTecDetailsByIdc/${form.idcType}/${form.idcCode}`, | ||
| 821 | method: 'get' | ||
| 822 | }) | ||
| 823 | } | ||
| 824 | function getLevelChangeAddList(params) { | ||
| 825 | return request({ | ||
| 826 | url: `/person/levelMod/list`, | ||
| 827 | method: 'get', | ||
| 828 | params: params | ||
| 829 | }) | ||
| 830 | } | ||
| 831 | function getChangelevelList(params) { | ||
| 832 | return request({ | ||
| 833 | url: `/person/levelModRange/list`, | ||
| 834 | method: 'get', | ||
| 835 | params: params | ||
| 836 | }) | ||
| 837 | } | ||
| 838 | function addLevelList(data) { | ||
| 839 | return request({ | ||
| 840 | url: `/person/levelMod/addLevelModToRange`, | ||
| 841 | method: 'post', | ||
| 842 | params:data | ||
| 843 | }) | ||
| 844 | } | ||
| 845 | function addLevelModToRange(data) { | ||
| 846 | return request({ | ||
| 847 | url: `/person/levelMod/editModInfo/${data.modId}?reason=${data.reason}&modId=${data.modId}`, | ||
| 848 | method: 'post' | ||
| 849 | }) | ||
| 850 | } | ||
| 851 | function addLevelModToRangeFile(data) { | ||
| 852 | return request({ | ||
| 853 | url: `/person/levelMod/editModInfo/${data.modId}?modId=${data.modId}&fileUrl=${encodeURIComponent(data.fileUrl)}`, | ||
| 854 | method: 'post' | ||
| 855 | }) | ||
| 856 | } | ||
| 857 | function levelModRangeDelete(ids) { | ||
| 858 | return request({ | ||
| 859 | url: `/person/levelModRange/${ids}`, | ||
| 860 | method: 'delete' | ||
| 861 | }) | ||
| 862 | } | ||
| 863 | function commitLevelChange(ids) { | ||
| 864 | return request({ | ||
| 865 | url: `/person/levelModRange/commit/${ids}`, | ||
| 866 | method: 'post' | ||
| 867 | }) | ||
| 868 | } | ||
| 869 | function editNewJi(data) { | ||
| 870 | return request({ | ||
| 871 | url: `/person/levelMod/editNewJi/${data.modId}?newJi=${data.NewJi}`, | ||
| 872 | method: 'post' | ||
| 873 | }) | ||
| 874 | } | ||
| 875 | function delLevelChangePer(data) { | ||
| 876 | return request({ | ||
| 877 | url: `/person/levelMod/${data}`, | ||
| 878 | method: 'delete' | ||
| 879 | }) | ||
| 880 | } | ||
| 881 | function levelModCommit(ids) { | ||
| 882 | return request({ | ||
| 883 | url: `/person/levelModRange/commit/${ids}`, | ||
| 884 | method: 'post' | ||
| 885 | }) | ||
| 886 | } | ||
| 887 | function changeLevelAudit(data) { | ||
| 888 | return request({ | ||
| 889 | url: `/person/levelModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`, | ||
| 890 | method: 'post' | ||
| 891 | }) | ||
| 892 | } | ||
| 893 | function changeLevelWithDraw(data) { | ||
| 894 | return request({ | ||
| 895 | url: `/person/levelModRange/withDraw/${data}`, | ||
| 896 | method: 'post' | ||
| 897 | }) | ||
| 898 | } | ||
| 899 | function getMemberInfoModRange(data) { | ||
| 900 | return request({ | ||
| 901 | url: `/member/infoModRange/list`, | ||
| 902 | method: 'get', | ||
| 903 | params: data | ||
| 904 | }) | ||
| 905 | } | ||
| 906 | function commitGroupChange(ids) { | ||
| 907 | return request({ | ||
| 908 | url: `/member/infoModRange/commit/${ids}`, | ||
| 909 | method: 'post' | ||
| 910 | }) | ||
| 911 | } | ||
| 912 | function delGroupChange(ids) { | ||
| 913 | return request({ | ||
| 914 | url: `/member/infoModRange/${ids}`, | ||
| 915 | method: 'delete' | ||
| 916 | }) | ||
| 917 | } | ||
| 918 | function getChangeGroupByRangeId(data) { | ||
| 919 | return request({ | ||
| 920 | url: `/member/infoMod/list`, | ||
| 921 | method: 'get', | ||
| 922 | params: data | ||
| 923 | }) | ||
| 924 | } | ||
| 925 | function groupInfoMod(ids) { | ||
| 926 | return request({ | ||
| 927 | url: `/member/infoMod/${ids}`, | ||
| 928 | method: 'delete' | ||
| 929 | }) | ||
| 930 | } | ||
| 931 | function extractInfoFromChinaIdCard(data) { | ||
| 932 | return request({ | ||
| 933 | url: '/person/info/extractInfo', | ||
| 934 | method: 'post', | ||
| 935 | params: data | ||
| 936 | }) | ||
| 937 | } | ||
| 938 | |||
| 742 | export { | 939 | export { |
| 743 | getMessage, | 940 | getMessage, |
| 744 | reader, | 941 | reader, |
| ... | @@ -820,5 +1017,18 @@ export { | ... | @@ -820,5 +1017,18 @@ export { |
| 820 | doMergeFlowsPer, | 1017 | doMergeFlowsPer, |
| 821 | unMerge, dellevelPerson, getExamPersonNum, | 1018 | unMerge, dellevelPerson, getExamPersonNum, |
| 822 | doVerityBack,delRange,groupWithDraw, | 1019 | doVerityBack,delRange,groupWithDraw, |
| 823 | delLevel,cancelMerge,submitPayment | 1020 | delLevel,cancelMerge,submitPayment, |
| 1021 | getInfoModRange,addInfoModeList,infoMod, | ||
| 1022 | commitPersonalChange,delPersonalChange, | ||
| 1023 | addInfoModeToRange, | ||
| 1024 | personChangeEditMod,personChangeWithDraw, | ||
| 1025 | personChangeAudit,pickUpByPersonInfo, | ||
| 1026 | getLevelChangeAddList,getChangelevelList,addLevelList, | ||
| 1027 | addLevelModToRange,levelModRangeDelete,commitLevelChange, | ||
| 1028 | editNewJi,delLevelChangePer,levelModCommit,addLevelModToRangeFile, | ||
| 1029 | changeLevelAudit,changeLevelWithDraw, | ||
| 1030 | |||
| 1031 | getMemberInfoModRange,commitGroupChange,delGroupChange, | ||
| 1032 | getChangeGroupByRangeId,groupInfoMod,addGroupInfoModeToRange, | ||
| 1033 | groupChangeEditMod,groupChangeAudit,extractInfoFromChinaIdCard | ||
| 824 | } | 1034 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -29,7 +29,7 @@ function h5LoginAuto() { | ... | @@ -29,7 +29,7 @@ function h5LoginAuto() { |
| 29 | return h5Login(userName) | 29 | return h5Login(userName) |
| 30 | } else { | 30 | } else { |
| 31 | uni.redirectTo({ | 31 | uni.redirectTo({ |
| 32 | url: '/pages/index/login' | 32 | url: '/login/login' |
| 33 | }) | 33 | }) |
| 34 | } | 34 | } |
| 35 | } | 35 | } |
| ... | @@ -81,8 +81,10 @@ function getInfo() { | ... | @@ -81,8 +81,10 @@ function getInfo() { |
| 81 | method: 'get' | 81 | method: 'get' |
| 82 | }).then(res => { | 82 | }).then(res => { |
| 83 | const app = getApp() | 83 | const app = getApp() |
| 84 | const user = res.data.user | 84 | const user = res.data.user |
| 85 | uni.setStorageSync('userName', user.userName) | 85 | // const personInfo = res.data.personInfo |
| 86 | uni.setStorageSync('userName', user.userName) | ||
| 87 | // uni.setStorageSync('perId', personInfo.perId||-1) | ||
| 86 | app.globalData.deptType = user.dept.deptType | 88 | app.globalData.deptType = user.dept.deptType |
| 87 | switch (user.dept.deptType) { | 89 | switch (user.dept.deptType) { |
| 88 | case '1': // 中跆协 | 90 | case '1': // 中跆协 | ... | ... |
This diff could not be displayed because it is too large.
| ... | @@ -24,8 +24,9 @@ function getHeaders() { | ... | @@ -24,8 +24,9 @@ function getHeaders() { |
| 24 | const token = getToken() | 24 | const token = getToken() |
| 25 | const header = { | 25 | const header = { |
| 26 | 'Authorization': token, | 26 | 'Authorization': token, |
| 27 | 'Content-Type': 'application/json' // 根据自己的数据类型 | 27 | 'Content-Type': 'application/json', // 根据自己的数据类型 |
| 28 | // "Content-Type":"application/x-www-form-urlencoded", | 28 | // "Content-Type":"application/x-www-form-urlencoded", |
| 29 | 'Ztx-Per-Id': uni.getStorageSync('perId') || '-1' | ||
| 29 | } | 30 | } |
| 30 | return header | 31 | return header |
| 31 | } | 32 | } |
| ... | @@ -41,11 +42,11 @@ const request = function(req) { | ... | @@ -41,11 +42,11 @@ const request = function(req) { |
| 41 | } | 42 | } |
| 42 | 43 | ||
| 43 | // if (req.method === 'GET') { | 44 | // if (req.method === 'GET') { |
| 44 | // if (!req.params) { | 45 | // if (!req.params) { |
| 45 | // req.params = {} | 46 | // req.params = {} |
| 46 | // } | 47 | // } |
| 47 | // req.params.pageNum = req.params.pageNum || 1 | 48 | // req.params.pageNum = req.params.pageNum || 1 |
| 48 | // req.params.pageSize = req.params.pageSize || 50 | 49 | // req.params.pageSize = req.params.pageSize || 50 |
| 49 | // } | 50 | // } |
| 50 | 51 | ||
| 51 | // if (req.method == 'POST' && !req.hideLoding) { | 52 | // if (req.method == 'POST' && !req.hideLoding) { |
| ... | @@ -70,27 +71,27 @@ const request = function(req) { | ... | @@ -70,27 +71,27 @@ const request = function(req) { |
| 70 | resolve(data) | 71 | resolve(data) |
| 71 | } else { | 72 | } else { |
| 72 | // if (!excludeUrls.includes(req.url)) { | 73 | // if (!excludeUrls.includes(req.url)) { |
| 73 | // if (data.msg) { | 74 | // if (data.msg) { |
| 74 | // uni.showModal({ | 75 | // uni.showModal({ |
| 75 | // content: data.msg, | 76 | // content: data.msg, |
| 76 | // success: function(res) { | 77 | // success: function(res) { |
| 77 | 78 | ||
| 78 | // } | 79 | // } |
| 79 | // }) | 80 | // }) |
| 80 | uni.showToast({ | 81 | uni.showToast({ |
| 81 | title: data.msg, | 82 | title: data.msg, |
| 82 | icon: 'none', | 83 | icon: 'none', |
| 83 | duration: 2000 | 84 | duration: 2000 |
| 84 | }) | 85 | }) |
| 85 | // } | 86 | // } |
| 86 | // uni.hideLoading() | 87 | // uni.hideLoading() |
| 87 | 88 | ||
| 88 | // } | 89 | // } |
| 89 | 90 | ||
| 90 | // 登录超时 | 91 | // 登录超时 |
| 91 | if (data.code === 60002 || data.code === 60001) { | 92 | if (data.code === 60002 || data.code === 60001) { |
| 92 | uni.redirectTo({ | 93 | uni.redirectTo({ |
| 93 | url: '/pages/index/login' | 94 | url: '/login/login' |
| 94 | }) | 95 | }) |
| 95 | } else if (data.code === 401) { | 96 | } else if (data.code === 401) { |
| 96 | h5LoginAuto() | 97 | h5LoginAuto() | ... | ... |
| ... | @@ -2,12 +2,15 @@ | ... | @@ -2,12 +2,15 @@ |
| 2 | // const baseUrl_api = 'https://research.wtwuxicenter.com/'; | 2 | // const baseUrl_api = 'https://research.wtwuxicenter.com/'; |
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | // staging | 5 | // staging 会员系统 |
| 6 | // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; | 6 | // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; |
| 7 | // const baseUrl_api = "http://123.60.96.243//stage-api/"; | 7 | // const baseUrl_api = "http://123.60.96.243/stage-api/"; |
| 8 | // const baseUrl_api = 'http://192.168.1.11:8787' | 8 | const baseUrl_api = 'http://192.168.1.11:8787' |
| 9 | const baseUrl_api = 'https://ztx.itechtop.cn/stage-api' | 9 | // const baseUrl_api = 'https://ztx.itechtop.cn/stage-api' |
| 10 | // const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/' | 10 | // const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/' |
| 11 | |||
| 12 | // train | ||
| 13 | // const baseUrl_api = 'http://192.168.1.25:8686' | ||
| 11 | 14 | ||
| 12 | export default { | 15 | export default { |
| 13 | baseUrl_api | 16 | baseUrl_api | ... | ... |
| ... | @@ -4,7 +4,7 @@ | ... | @@ -4,7 +4,7 @@ |
| 4 | <view class="invertedbtn-red" @click="gochose">+ 在线选择</view> | 4 | <view class="invertedbtn-red" @click="gochose">+ 在线选择</view> |
| 5 | </view> | 5 | </view> |
| 6 | <uni-swipe-action> | 6 | <uni-swipe-action> |
| 7 | <uni-swipe-action-item class="personitem" v-for="n in list"> | 7 | <uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index"> |
| 8 | <view class="content-box"> | 8 | <view class="content-box"> |
| 9 | <view style="width: 70%;"> | 9 | <view style="width: 70%;"> |
| 10 | <view>{{n.memberName}} | 10 | <view>{{n.memberName}} |
| ... | @@ -60,7 +60,7 @@ | ... | @@ -60,7 +60,7 @@ |
| 60 | 60 | ||
| 61 | <uni-popup ref="pickView" type="bottom"> | 61 | <uni-popup ref="pickView" type="bottom"> |
| 62 | <view class="pickViewBox"> | 62 | <view class="pickViewBox"> |
| 63 | <view v-for="n in yearlist" @click="bindyear(n)"> | 63 | <view v-for="(n,index) in yearlist" :key="index" @click="bindyear(n)"> |
| 64 | {{n.text}}<uni-icons v-show="n.value == (nowYear)" type="checkmarkempty" size="20" | 64 | {{n.text}}<uni-icons v-show="n.value == (nowYear)" type="checkmarkempty" size="20" |
| 65 | color="green"></uni-icons> | 65 | color="green"></uni-icons> |
| 66 | </view> | 66 | </view> |
| ... | @@ -255,7 +255,7 @@ | ... | @@ -255,7 +255,7 @@ |
| 255 | box-sizing: border-box; | 255 | box-sizing: border-box; |
| 256 | margin-bottom: 30rpx; | 256 | margin-bottom: 30rpx; |
| 257 | 257 | ||
| 258 | .content-box { | 258 | .content-box {background: #fff; |
| 259 | display: flex; | 259 | display: flex; |
| 260 | align-items: center; | 260 | align-items: center; |
| 261 | padding: 16rpx; | 261 | padding: 16rpx; | ... | ... |
group/changeGroupAudit.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | </view> | ||
| 8 | <view class="vipData"> | ||
| 9 | <view>变更团体数合计: <text>{{statistical.personCount}}</text>个</view> | ||
| 10 | </view> | ||
| 11 | <view class="appList"> | ||
| 12 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 13 | <view class="status" @click="goDetail(item)"> | ||
| 14 | <view> | ||
| 15 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 16 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 17 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 18 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 19 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | |||
| 23 | <view class="name mt0" @click="goDetail(item)"> | ||
| 24 | {{item.code}}-{{item.shenMemName}} | ||
| 25 | </view> | ||
| 26 | <view class="flexbox" @click="goDetail(item)"> | ||
| 27 | <view> | ||
| 28 | 变更团体数 | ||
| 29 | <view> | ||
| 30 | <text class="text-danger">{{item.count}}个</text> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | <view class="w50"> | ||
| 34 | 提交时间 | ||
| 35 | <view>{{item.commitTime||'--'}}</view> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | <view class="func" v-if="item.status==1"> | ||
| 39 | <button @click="audit(item.id,0)">拒绝</button> | ||
| 40 | <button @click="audit(item.id,1)">同意</button> | ||
| 41 | </view> | ||
| 42 | <!-- <view class="func" v-if="item.status==2"> | ||
| 43 | <button @click="handleDelete(item)">撤回</button> | ||
| 44 | </view> --> | ||
| 45 | |||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | <view class="nodata" v-if="list.length==0"> | ||
| 49 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 50 | <text>暂无数据</text> | ||
| 51 | </view> | ||
| 52 | </view> | ||
| 53 | </template> | ||
| 54 | |||
| 55 | <script setup> | ||
| 56 | import * as api from '@/common/api.js' | ||
| 57 | import config from '@/config.js' | ||
| 58 | import { | ||
| 59 | ref | ||
| 60 | } from 'vue' | ||
| 61 | import { | ||
| 62 | onLoad, | ||
| 63 | onShow | ||
| 64 | } from '@dcloudio/uni-app' | ||
| 65 | const app = getApp(); | ||
| 66 | const queryParams = ref({ | ||
| 67 | code:'', | ||
| 68 | ztxFlag: '1' | ||
| 69 | }) | ||
| 70 | const list = ref([]) | ||
| 71 | const statistical = ref({ | ||
| 72 | personCount: 0 | ||
| 73 | }) | ||
| 74 | const total = ref(0) | ||
| 75 | onShow(()=>{ | ||
| 76 | getList() | ||
| 77 | }) | ||
| 78 | function getList(){ | ||
| 79 | uni.showLoading({ | ||
| 80 | title:'加载中' | ||
| 81 | }) | ||
| 82 | statistical.value.personCount = 0 | ||
| 83 | api.getMemberInfoModRange(queryParams.value).then(res=>{ | ||
| 84 | list.value = res.rows | ||
| 85 | list.value.forEach(item => { | ||
| 86 | statistical.value.personCount += (item.count * 1) | ||
| 87 | }) | ||
| 88 | total.value = res.total | ||
| 89 | uni.hideLoading() | ||
| 90 | }) | ||
| 91 | } | ||
| 92 | function goDetail(item){ | ||
| 93 | let path = `/group/changeGroupDetail?rangeId=${item.id}` | ||
| 94 | uni.navigateTo({ | ||
| 95 | url: path | ||
| 96 | }); | ||
| 97 | } | ||
| 98 | function handleDelete(row){ | ||
| 99 | uni.showModal({ | ||
| 100 | title: '提示', | ||
| 101 | content: `确定撤回吗`, | ||
| 102 | success: function(res) { | ||
| 103 | if (res.confirm) { | ||
| 104 | api.personChangeWithDraw([row.id]).then(Response=>{ | ||
| 105 | uni.showToast({ | ||
| 106 | icon:"none", | ||
| 107 | title:'撤回成功!' | ||
| 108 | }) | ||
| 109 | getList() | ||
| 110 | }) | ||
| 111 | } | ||
| 112 | } | ||
| 113 | }) | ||
| 114 | } | ||
| 115 | function audit(id, flag) { | ||
| 116 | if (flag == 0) { | ||
| 117 | // 拒绝 | ||
| 118 | // 弹出框填写理由 | ||
| 119 | uni.showModal({ | ||
| 120 | title: '请输入拒绝理由', | ||
| 121 | editable: true, | ||
| 122 | success: function(res) { | ||
| 123 | if (res.confirm) { | ||
| 124 | if (!res.content) { | ||
| 125 | uni.showToast({ | ||
| 126 | title: '请输入拒绝理由', | ||
| 127 | icon: 'none' | ||
| 128 | }) | ||
| 129 | } else { | ||
| 130 | doApproval(id, flag, res.content) | ||
| 131 | } | ||
| 132 | } | ||
| 133 | } | ||
| 134 | }) | ||
| 135 | } else if (flag == 1) { | ||
| 136 | // 二次确认 | ||
| 137 | uni.showModal({ | ||
| 138 | title: '提示', | ||
| 139 | content: `确定审批通过吗`, | ||
| 140 | success: function(res) { | ||
| 141 | if (res.confirm) { | ||
| 142 | doApproval(id, flag) | ||
| 143 | } | ||
| 144 | } | ||
| 145 | }) | ||
| 146 | } | ||
| 147 | } | ||
| 148 | |||
| 149 | function doApproval(id, flag, reason) { | ||
| 150 | var obj = { | ||
| 151 | flag: flag, | ||
| 152 | reason: reason || '', | ||
| 153 | ids: [id] | ||
| 154 | } | ||
| 155 | console.log(obj) | ||
| 156 | api.groupChangeAudit(obj).then((res) => { | ||
| 157 | uni.showToast({ | ||
| 158 | title: '操作成功', | ||
| 159 | icon: 'none' | ||
| 160 | }) | ||
| 161 | getList() | ||
| 162 | }) | ||
| 163 | } | ||
| 164 | |||
| 165 | </script> | ||
| 166 | |||
| 167 | <style lang='scss' scoped> | ||
| 168 | .searchbar { | ||
| 169 | display: flex; | ||
| 170 | align-items: center; | ||
| 171 | padding: 25rpx; | ||
| 172 | box-sizing: border-box; | ||
| 173 | |||
| 174 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 175 | border-radius: 35rpx; | ||
| 176 | border: none; | ||
| 177 | height: 70rpx; | ||
| 178 | } | ||
| 179 | |||
| 180 | :deep(.uni-easyinput__content-input) { | ||
| 181 | font-size: 26rpx; | ||
| 182 | } | ||
| 183 | |||
| 184 | .invertedbtn-red { | ||
| 185 | border-radius: 50px; | ||
| 186 | background-color: #fff; | ||
| 187 | |||
| 188 | font-size: 30rpx; | ||
| 189 | padding: 10rpx 20rpx; | ||
| 190 | } | ||
| 191 | } | ||
| 192 | |||
| 193 | </style> |
group/changeGroupDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <uni-collapse> | ||
| 4 | <uni-collapse-item :title="n.newName" v-for="n in list" :key="n.id" open> | ||
| 5 | <view class="collapseBody"> | ||
| 6 | <view> | ||
| 7 | <label>会员编号:</label> | ||
| 8 | <text>{{n.memCode}}</text> | ||
| 9 | </view> | ||
| 10 | <view> | ||
| 11 | <label>团体会员名称:</label> | ||
| 12 | <view> | ||
| 13 | {{n.oldName}} | ||
| 14 | <text class="text-primary" v-if="n.oldName!=n.newName">变更为 </text> | ||
| 15 | <text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text> | ||
| 16 | |||
| 17 | </view> | ||
| 18 | </view> | ||
| 19 | |||
| 20 | <view v-if="n.fileUrl"> | ||
| 21 | <label>附件:</label> | ||
| 22 | <text class="text-primary" @click="showImg(n)"> | ||
| 23 | 查看附件 | ||
| 24 | </text> | ||
| 25 | </view> | ||
| 26 | </view> | ||
| 27 | |||
| 28 | </uni-collapse-item> | ||
| 29 | </uni-collapse> | ||
| 30 | |||
| 31 | </view> | ||
| 32 | </template> | ||
| 33 | |||
| 34 | <script setup> | ||
| 35 | import { | ||
| 36 | ref | ||
| 37 | } from 'vue' | ||
| 38 | import { | ||
| 39 | onLoad | ||
| 40 | } from '@dcloudio/uni-app' | ||
| 41 | import * as api from '@/common/api.js' | ||
| 42 | import config from '@/config.js' | ||
| 43 | const queryParams = ref({}) | ||
| 44 | const total = ref(0) | ||
| 45 | const list = ref([]) | ||
| 46 | const popup = ref(null) | ||
| 47 | const type = ref('') | ||
| 48 | const form = ref({}) | ||
| 49 | onLoad((option) => { | ||
| 50 | if (option.rangeId) { | ||
| 51 | queryParams.value.rangeId = option.rangeId | ||
| 52 | getList() | ||
| 53 | } | ||
| 54 | }) | ||
| 55 | |||
| 56 | function getList() { | ||
| 57 | uni.showLoading({ | ||
| 58 | title: '加载中' | ||
| 59 | }) | ||
| 60 | api.getChangeGroupByRangeId(queryParams.value).then(res => { | ||
| 61 | list.value = res.rows | ||
| 62 | list.value.forEach(item => { | ||
| 63 | item.fileUrl = JSON.parse(item.fileUrl) | ||
| 64 | }) | ||
| 65 | total.value = res.total | ||
| 66 | uni.hideLoading() | ||
| 67 | }) | ||
| 68 | } | ||
| 69 | |||
| 70 | function showImg(n) { | ||
| 71 | var str = config.baseUrl_api + n.fileUrl[0]?.url | ||
| 72 | if (n.fileUrl[0]?.url.indexOf('png') > -1 || n.fileUrl[0]?.url.indexOf('jpg') > -1 || n.fileUrl[0]?.url.indexOf( | ||
| 73 | 'jpeg') > -1) { | ||
| 74 | uni.previewImage({ | ||
| 75 | urls: [str], | ||
| 76 | success: function(res) { | ||
| 77 | console.log('success', res) | ||
| 78 | }, | ||
| 79 | fail: function(res) { | ||
| 80 | console.log('fail', res) | ||
| 81 | }, | ||
| 82 | complete: function(res) { | ||
| 83 | console.log('complete', res) | ||
| 84 | } | ||
| 85 | }) | ||
| 86 | } else { | ||
| 87 | goWebView(str) | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | function goWebView(url) { | ||
| 92 | url = url.replace("http://", "https://") | ||
| 93 | uni.showLoading({ | ||
| 94 | title: '下载中' | ||
| 95 | }); | ||
| 96 | uni.downloadFile({ | ||
| 97 | url: url, | ||
| 98 | success: function(res) { | ||
| 99 | uni.hideLoading(); | ||
| 100 | var filePath = res.tempFilePath; | ||
| 101 | uni.showLoading({ | ||
| 102 | title: '正在打开' | ||
| 103 | }); | ||
| 104 | uni.openDocument({ | ||
| 105 | filePath: filePath, | ||
| 106 | showMenu: true, | ||
| 107 | success: function(res) { | ||
| 108 | uni.hideLoading(); | ||
| 109 | }, | ||
| 110 | fail: function(err) { | ||
| 111 | uni.hideLoading(); | ||
| 112 | uni.showToast({ | ||
| 113 | title: err, | ||
| 114 | icon: 'none', | ||
| 115 | duration: 2000 | ||
| 116 | }); | ||
| 117 | } | ||
| 118 | }); | ||
| 119 | }, | ||
| 120 | fail: function(error) { | ||
| 121 | uni.hideLoading(); | ||
| 122 | uni.showToast({ | ||
| 123 | title: `下载失败`, | ||
| 124 | icon: 'none', | ||
| 125 | duration: 2000 | ||
| 126 | }); | ||
| 127 | } | ||
| 128 | }); | ||
| 129 | } | ||
| 130 | </script> | ||
| 131 | <style scoped lang="scss"> | ||
| 132 | .flexbox { | ||
| 133 | padding: 30rpx 30rpx 0 | ||
| 134 | } | ||
| 135 | |||
| 136 | .danger-button { | ||
| 137 | display: flex; | ||
| 138 | flex-direction: column; | ||
| 139 | align-items: center; | ||
| 140 | justify-content: center; | ||
| 141 | } | ||
| 142 | |||
| 143 | .collapseBody { | ||
| 144 | padding: 0 30rpx; | ||
| 145 | box-sizing: border-box; | ||
| 146 | font-size: 28rpx; | ||
| 147 | |||
| 148 | &>view { | ||
| 149 | margin: 0 0 20rpx;display: flex; | ||
| 150 | |||
| 151 | label { | ||
| 152 | width: 7em; | ||
| 153 | color: #999; | ||
| 154 | display: inline-block; | ||
| 155 | text-align: right;flex:0 0 auto; | ||
| 156 | } | ||
| 157 | view{flex:1 1 auto;} | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 161 | .popBody { | ||
| 162 | background: #fff; | ||
| 163 | padding: 30rpx; | ||
| 164 | } | ||
| 165 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
group/changeGroupInfo.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | <view class="invertedbtn-red" @click="goAdd">+ 新建变更</view> | ||
| 8 | </view> | ||
| 9 | |||
| 10 | <view class="appList"> | ||
| 11 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 12 | <view class="status" @click="goDetail(item)"> | ||
| 13 | <view> | ||
| 14 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 15 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 16 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 17 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 18 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 19 | </view> | ||
| 20 | </view> | ||
| 21 | |||
| 22 | <view class="name mt0" @click="goDetail(item)"> | ||
| 23 | {{item.code}}-{{item.shenMemName}} | ||
| 24 | </view> | ||
| 25 | <view class="flexbox" @click="goDetail(item)"> | ||
| 26 | <view> | ||
| 27 | 变更会员数 | ||
| 28 | <view> | ||
| 29 | <text class="text-danger">{{item.count}}个</text> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | </view> | ||
| 33 | |||
| 34 | <view class="w50"> | ||
| 35 | 提交时间 | ||
| 36 | <view>{{item.commitTime||'--'}}</view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="func" v-if="(item.status==0||item.status==3||item.status==4)"> | ||
| 40 | <button @click="handleUpdate(item)">编辑</button> | ||
| 41 | <button @click="commitFN(item)">提交审核</button> | ||
| 42 | <button @click="handleDelete(item)">删除</button> | ||
| 43 | </view> | ||
| 44 | |||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | <view class="nodata" v-if="list.length==0"> | ||
| 51 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 52 | <text>暂无数据</text> | ||
| 53 | </view> | ||
| 54 | </view> | ||
| 55 | </template> | ||
| 56 | |||
| 57 | <script setup> | ||
| 58 | import * as api from '@/common/api.js' | ||
| 59 | import config from '@/config.js' | ||
| 60 | import { | ||
| 61 | ref | ||
| 62 | } from 'vue' | ||
| 63 | import { | ||
| 64 | onLoad, | ||
| 65 | onShow | ||
| 66 | } from '@dcloudio/uni-app' | ||
| 67 | const app = getApp(); | ||
| 68 | const queryParams = ref({ | ||
| 69 | code:'' | ||
| 70 | }) | ||
| 71 | const list = ref([]) | ||
| 72 | const total = ref(0) | ||
| 73 | onShow(()=>{ | ||
| 74 | getList() | ||
| 75 | }) | ||
| 76 | function goAdd(){ | ||
| 77 | let path = `/group/newChange` | ||
| 78 | uni.navigateTo({ | ||
| 79 | url: path | ||
| 80 | }); | ||
| 81 | } | ||
| 82 | function getList(){ | ||
| 83 | uni.showLoading({ | ||
| 84 | title:'加载中' | ||
| 85 | }) | ||
| 86 | queryParams.value.memId = app.globalData.memberInfo.memId | ||
| 87 | api.getMemberInfoModRange(queryParams.value).then(res=>{ | ||
| 88 | list.value = res.rows | ||
| 89 | total.value = res.total | ||
| 90 | uni.hideLoading() | ||
| 91 | }) | ||
| 92 | } | ||
| 93 | function goDetail(item){ | ||
| 94 | let path = `/group/changeGroupDetail?rangeId=${item.id}` | ||
| 95 | uni.navigateTo({ | ||
| 96 | url: path | ||
| 97 | }); | ||
| 98 | } | ||
| 99 | function handleUpdate(item){ | ||
| 100 | // 编辑 | ||
| 101 | let path = `/group/newChange?rangeId=${item.id}` | ||
| 102 | uni.navigateTo({ | ||
| 103 | url: path | ||
| 104 | }); | ||
| 105 | } | ||
| 106 | function commitFN(row){ | ||
| 107 | uni.showModal({ | ||
| 108 | title: '提示', | ||
| 109 | content: `确定提交吗`, | ||
| 110 | success: function(res) { | ||
| 111 | if (res.confirm) { | ||
| 112 | api.commitGroupChange(row.id).then(Response=>{ | ||
| 113 | uni.showToast({ | ||
| 114 | icon:"none", | ||
| 115 | title:'提交成功!' | ||
| 116 | }) | ||
| 117 | getList() | ||
| 118 | }) | ||
| 119 | } | ||
| 120 | } | ||
| 121 | }) | ||
| 122 | } | ||
| 123 | function handleDelete(row){ | ||
| 124 | uni.showModal({ | ||
| 125 | title: '提示', | ||
| 126 | content: `确定删除吗`, | ||
| 127 | success: function(res) { | ||
| 128 | if (res.confirm) { | ||
| 129 | api.delGroupChange([row.id]).then(Response=>{ | ||
| 130 | uni.showToast({ | ||
| 131 | icon:"none", | ||
| 132 | title:'删除成功!' | ||
| 133 | }) | ||
| 134 | getList() | ||
| 135 | }) | ||
| 136 | } | ||
| 137 | } | ||
| 138 | }) | ||
| 139 | } | ||
| 140 | |||
| 141 | </script> | ||
| 142 | |||
| 143 | <style lang='scss' scoped> | ||
| 144 | .searchbar { | ||
| 145 | display: flex; | ||
| 146 | align-items: center; | ||
| 147 | padding: 25rpx; | ||
| 148 | box-sizing: border-box; | ||
| 149 | |||
| 150 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 151 | border-radius: 35rpx; | ||
| 152 | border: none; | ||
| 153 | height: 70rpx; | ||
| 154 | } | ||
| 155 | |||
| 156 | :deep(.uni-easyinput__content-input) { | ||
| 157 | font-size: 26rpx; | ||
| 158 | } | ||
| 159 | |||
| 160 | .invertedbtn-red { | ||
| 161 | border-radius: 50px; | ||
| 162 | background-color: #fff; | ||
| 163 | |||
| 164 | font-size: 30rpx; | ||
| 165 | padding: 10rpx 20rpx; | ||
| 166 | } | ||
| 167 | } | ||
| 168 | |||
| 169 | </style> |
group/newChange.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="hasfixedbottom"> | ||
| 3 | |||
| 4 | <view class="flexbox mb30"> | ||
| 5 | <button class="btn-red-kx mini w100" @click="chooseOnline"> | ||
| 6 | <uni-icons type="personadd" size="16" color="#AD181F"></uni-icons> | ||
| 7 | 在线选择</button> | ||
| 8 | </view> | ||
| 9 | |||
| 10 | <uni-swipe-action> | ||
| 11 | <uni-swipe-action-item class="personitem" v-for="n in list" :key="n.id"> | ||
| 12 | <uni-collapse> | ||
| 13 | <uni-collapse-item :title="n.oldName" open> | ||
| 14 | <view class="collapseBody"> | ||
| 15 | <view v-if="n.memCode"> | ||
| 16 | <label>会员编号:</label> | ||
| 17 | {{n.memCode}} | ||
| 18 | </view> | ||
| 19 | <view> | ||
| 20 | <label>团体会员名称:</label> | ||
| 21 | {{n.oldName}} | ||
| 22 | <text class="text-primary" @click="handleChange(n,'newName')">变更 </text> | ||
| 23 | <text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text> | ||
| 24 | </view> | ||
| 25 | <view style="display: flex;"> | ||
| 26 | <label><text class="text-danger">*</text>附件:</label> | ||
| 27 | <view class="content"> | ||
| 28 | <uni-file-picker limit="1" v-model="n.fileUrl" file-extname="png,jpg,jpeg,pdf,zip" | ||
| 29 | file-mediatype="all" @select="selectFile(n,$event)" | ||
| 30 | @delete="delSupplementFile(n)"></uni-file-picker> | ||
| 31 | <text class="text-danger">*需上传有效资料</text> | ||
| 32 | </view> | ||
| 33 | </view> | ||
| 34 | |||
| 35 | </view> | ||
| 36 | |||
| 37 | </uni-collapse-item> | ||
| 38 | </uni-collapse> | ||
| 39 | |||
| 40 | <template v-slot:right> | ||
| 41 | <view class="slot-button"> | ||
| 42 | <view class="danger-button" @click="handleDelete(n)"> | ||
| 43 | <uni-icons type="trash" color="#fff" size="20"></uni-icons> | ||
| 44 | <text class="slot-button-text">删除</text> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | </template> | ||
| 48 | </uni-swipe-action-item> | ||
| 49 | </uni-swipe-action> | ||
| 50 | <view class="nodata" v-if="list.length==0"> | ||
| 51 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 52 | <text>请选择变更会员</text> | ||
| 53 | </view> | ||
| 54 | |||
| 55 | <view class="fixedBottom"> | ||
| 56 | <button class="btn-red" :disabled="list?.length <= 0" @click="commitFN">保存并提交</button> | ||
| 57 | </view> | ||
| 58 | |||
| 59 | |||
| 60 | |||
| 61 | <uni-popup ref="popup" type="bottom" background-color="#fff"> | ||
| 62 | <view class="popBody"> | ||
| 63 | <view class="h3 text-center mb30">信息变更</view> | ||
| 64 | <uni-forms class="mt30" label-width="100"> | ||
| 65 | <view style="min-height: 30vh"> | ||
| 66 | <uni-forms-item label="团体会员名称:" v-show="type=='newName'"> | ||
| 67 | <uni-easyinput v-model="form.newName" placeholder="请输入" /> | ||
| 68 | </uni-forms-item> | ||
| 69 | </view> | ||
| 70 | |||
| 71 | </uni-forms> | ||
| 72 | <view class="text-center"> | ||
| 73 | <button class="btn-red-kx" @click="submitForm(type)">保存</button> | ||
| 74 | </view> | ||
| 75 | |||
| 76 | </view> | ||
| 77 | </uni-popup> | ||
| 78 | |||
| 79 | <uni-popup ref="choseStudent" type="bottom" background-color="#fff" animation> | ||
| 80 | <view class="popBody"> | ||
| 81 | <view class="searchbar"> | ||
| 82 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 83 | v-model="query.name" placeholder="搜索团体会员名称" @blur="getSonList" @clear="getSonList"> | ||
| 84 | </uni-easyinput> | ||
| 85 | <view class="invertedbtn-red" @click="getSonList">搜索</view> | ||
| 86 | </view> | ||
| 87 | <view class="userlist" style="height:70vh;overflow: auto;"> | ||
| 88 | <view class="item" v-for=" (n,index) in studentList" :key="index"> | ||
| 89 | <view @click="checkThis(n)"> | ||
| 90 | <image class="icon" v-if="n.checked" | ||
| 91 | :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" /> | ||
| 92 | <image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" /> | ||
| 93 | </view> | ||
| 94 | <view class="w100"> | ||
| 95 | <view class="name">{{n.name}} </view> | ||
| 96 | <view class="flexbox" style="padding: 0"> | ||
| 97 | <view v-if="n.memCode">会员号 | ||
| 98 | <text>{{n.memCode}}</text> | ||
| 99 | </view> | ||
| 100 | <view class="date" v-if="n.validityDate">到期时间 | ||
| 101 | <text>{{n.validityDate?.slice(0,10)}}</text> | ||
| 102 | </view> | ||
| 103 | <view class="date">团体类型 | ||
| 104 | <text v-if="n.deptType == 2">一级协会</text> | ||
| 105 | <text v-if="n.deptType == 3">直属协会</text> | ||
| 106 | <text v-if="n.deptType == 4">二级协会</text> | ||
| 107 | <text v-if="n.deptType == 5">三级协会</text> | ||
| 108 | <text v-if="n.deptType == 6">职业性团体会员</text> | ||
| 109 | </view> | ||
| 110 | </view> | ||
| 111 | </view> | ||
| 112 | </view> | ||
| 113 | <view class="nodata" v-if="studentList.length==0"> | ||
| 114 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 115 | <text>无可变更会员</text> | ||
| 116 | </view> | ||
| 117 | </view> | ||
| 118 | <button class="btn-red-kx" v-if="studentList.length!=0" @click="handleImport">批量添加</button> | ||
| 119 | </view> | ||
| 120 | </uni-popup> | ||
| 121 | |||
| 122 | </view> | ||
| 123 | </template> | ||
| 124 | |||
| 125 | <script setup> | ||
| 126 | import { | ||
| 127 | ref | ||
| 128 | } from 'vue' | ||
| 129 | import { | ||
| 130 | onLoad, | ||
| 131 | onShow | ||
| 132 | } from '@dcloudio/uni-app' | ||
| 133 | import * as api from '@/common/api.js' | ||
| 134 | import config from '/config.js' | ||
| 135 | const queryParams = ref({}) | ||
| 136 | const query = ref({}) | ||
| 137 | const total = ref(0) | ||
| 138 | const list = ref([]) | ||
| 139 | const popup = ref(null) | ||
| 140 | const choseStudent = ref(null) | ||
| 141 | const studentList = ref([]) | ||
| 142 | const type = ref('') | ||
| 143 | const form = ref({}) | ||
| 144 | |||
| 145 | onLoad((option) => { | ||
| 146 | if (option.rangeId) { | ||
| 147 | queryParams.value.rangeId = option.rangeId | ||
| 148 | getList() | ||
| 149 | } | ||
| 150 | }) | ||
| 151 | onShow(() => {}) | ||
| 152 | |||
| 153 | function getList() { | ||
| 154 | uni.showLoading({ | ||
| 155 | title: '加载中' | ||
| 156 | }) | ||
| 157 | api.getChangeGroupByRangeId(queryParams.value).then(res => { | ||
| 158 | list.value = res.rows | ||
| 159 | list.value.forEach(item => { | ||
| 160 | item.fileUrl = JSON.parse(item.fileUrl) | ||
| 161 | }) | ||
| 162 | total.value = res.total | ||
| 163 | uni.hideLoading() | ||
| 164 | }) | ||
| 165 | } | ||
| 166 | |||
| 167 | function handleChange(a, b) { | ||
| 168 | type.value = b | ||
| 169 | form.value = a | ||
| 170 | console.log(form.value.newName) | ||
| 171 | popup.value.open() | ||
| 172 | } | ||
| 173 | |||
| 174 | function handleDelete(row) { | ||
| 175 | uni.showModal({ | ||
| 176 | content: `确认删除${row.newName}`, | ||
| 177 | success: function(res) { | ||
| 178 | if (res.confirm) { | ||
| 179 | api.groupInfoMod([row.id]).then(Response => { | ||
| 180 | uni.showToast({ | ||
| 181 | title: '操作成功' | ||
| 182 | }) | ||
| 183 | getList() | ||
| 184 | }) | ||
| 185 | } | ||
| 186 | } | ||
| 187 | }) | ||
| 188 | } | ||
| 189 | |||
| 190 | function chooseOnline() { | ||
| 191 | uni.showLoading({ | ||
| 192 | title: '加载中', | ||
| 193 | icon: 'none' | ||
| 194 | }) | ||
| 195 | query.value.paymentRangeId = queryParams.value.rangeId || '-1' | ||
| 196 | api.getMySonList(query.value).then(res => { | ||
| 197 | studentList.value = res.data.rows | ||
| 198 | uni.hideLoading() | ||
| 199 | choseStudent.value.open() | ||
| 200 | }) | ||
| 201 | |||
| 202 | } | ||
| 203 | function getSonList(){ | ||
| 204 | uni.showLoading({ | ||
| 205 | title: '加载中', | ||
| 206 | icon: 'none' | ||
| 207 | }) | ||
| 208 | query.value.paymentRangeId = queryParams.value.rangeId || '-1' | ||
| 209 | api.getMySonList(query.value).then(res => { | ||
| 210 | studentList.value = res.data.rows | ||
| 211 | uni.hideLoading() | ||
| 212 | }) | ||
| 213 | } | ||
| 214 | |||
| 215 | function checkThis(n) { | ||
| 216 | if (n.checked) { | ||
| 217 | n.checked = false | ||
| 218 | } else { | ||
| 219 | n.checked = true | ||
| 220 | } | ||
| 221 | } | ||
| 222 | |||
| 223 | function handleImport() { | ||
| 224 | var arr = [] | ||
| 225 | for (var n of studentList.value) { | ||
| 226 | if (n.checked) { | ||
| 227 | arr.push(n.memId) | ||
| 228 | } | ||
| 229 | } | ||
| 230 | api.addGroupInfoModeToRange({ | ||
| 231 | memId: arr, | ||
| 232 | rangeIdStr: queryParams.value.rangeId || '-1' | ||
| 233 | }).then(res => { | ||
| 234 | queryParams.value.rangeId = res.data | ||
| 235 | choseStudent.value.close() | ||
| 236 | getList() | ||
| 237 | }) | ||
| 238 | } | ||
| 239 | |||
| 240 | function submitForm(type) { | ||
| 241 | api.groupChangeEditMod({ | ||
| 242 | id: form.value.id, | ||
| 243 | newName: form.value.newName | ||
| 244 | }).then(res => { | ||
| 245 | popup.value.close() | ||
| 246 | uni.showToast({ | ||
| 247 | title: '操作成功!' | ||
| 248 | }) | ||
| 249 | getList() | ||
| 250 | }) | ||
| 251 | } | ||
| 252 | |||
| 253 | function commitFN() { | ||
| 254 | const flag = list.value.some(item => { | ||
| 255 | if (!item.fileUrl) { | ||
| 256 | uni.showToast({ | ||
| 257 | title: `请上传${item.newName}的附件`, | ||
| 258 | icon: 'none' | ||
| 259 | }) | ||
| 260 | return !item.fileUrl | ||
| 261 | } | ||
| 262 | }) | ||
| 263 | if (flag) return | ||
| 264 | if (form.value.rangeId == '') return | ||
| 265 | |||
| 266 | uni.showModal({ | ||
| 267 | title: '提示', | ||
| 268 | content: `确定提交吗`, | ||
| 269 | success: function(res) { | ||
| 270 | if (res.confirm) { | ||
| 271 | api.commitGroupChange([queryParams.value.rangeId]).then(Response => { | ||
| 272 | uni.showToast({ | ||
| 273 | icon: "none", | ||
| 274 | title: '提交成功!' | ||
| 275 | }) | ||
| 276 | uni.navigateBack() | ||
| 277 | }) | ||
| 278 | } | ||
| 279 | } | ||
| 280 | }) | ||
| 281 | } | ||
| 282 | let selectFileValue = {} | ||
| 283 | |||
| 284 | function selectFile(row, e) { | ||
| 285 | console.log(row, e) | ||
| 286 | form.value = row | ||
| 287 | let file = e.tempFiles[0] | ||
| 288 | api.uploadFile(e).then(data => { | ||
| 289 | selectFileValue = { | ||
| 290 | url: data.msg, | ||
| 291 | name: file.name, | ||
| 292 | extname: file.extname | ||
| 293 | } | ||
| 294 | console.log(selectFileValue, row.fileUrl) | ||
| 295 | uni.showLoading({ | ||
| 296 | title: '上传中' | ||
| 297 | }) | ||
| 298 | api.groupChangeEditMod({ | ||
| 299 | id: form.value.id, | ||
| 300 | newName: form.value.newName, | ||
| 301 | fileUrl: JSON.stringify([selectFileValue]) | ||
| 302 | }).then(Response => { | ||
| 303 | uni.hideLoading() | ||
| 304 | getList() | ||
| 305 | }) | ||
| 306 | }); | ||
| 307 | } | ||
| 308 | |||
| 309 | function delSupplementFile(row) { | ||
| 310 | selectFileValue = {} | ||
| 311 | row.fileUrl = [] | ||
| 312 | } | ||
| 313 | </script> | ||
| 314 | <style scoped lang="scss"> | ||
| 315 | .searchbar { | ||
| 316 | display: flex; | ||
| 317 | align-items: center; | ||
| 318 | padding:0 0 25rpx; | ||
| 319 | box-sizing: border-box; | ||
| 320 | |||
| 321 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 322 | border-radius: 35rpx; | ||
| 323 | height: 66rpx; border: 1px solid #AD181F!important; | ||
| 324 | } | ||
| 325 | |||
| 326 | :deep(.uni-easyinput__content-input) { | ||
| 327 | font-size: 26rpx; | ||
| 328 | } | ||
| 329 | |||
| 330 | .invertedbtn-red { | ||
| 331 | border-radius: 50px; margin-left: 20rpx; | ||
| 332 | background-color: #fff; | ||
| 333 | |||
| 334 | font-size: 30rpx; | ||
| 335 | padding: 10rpx 20rpx; | ||
| 336 | } | ||
| 337 | } | ||
| 338 | .userlist .item{background-color: #f4f4f4;} | ||
| 339 | .flexbox { | ||
| 340 | padding: 30rpx 30rpx 0 | ||
| 341 | } | ||
| 342 | |||
| 343 | .danger-button { | ||
| 344 | display: flex; | ||
| 345 | flex-direction: column; | ||
| 346 | align-items: center; | ||
| 347 | justify-content: center; | ||
| 348 | } | ||
| 349 | |||
| 350 | .collapseBody { | ||
| 351 | padding: 0 30rpx; | ||
| 352 | box-sizing: border-box; | ||
| 353 | font-size: 28rpx; | ||
| 354 | |||
| 355 | view { | ||
| 356 | margin: 0 0 20rpx; | ||
| 357 | |||
| 358 | label { | ||
| 359 | width: 7em; | ||
| 360 | color: #999; | ||
| 361 | display: inline-block; | ||
| 362 | text-align: right; | ||
| 363 | } | ||
| 364 | } | ||
| 365 | } | ||
| 366 | |||
| 367 | .popBody { | ||
| 368 | background: #fff; | ||
| 369 | padding: 30rpx; | ||
| 370 | } | ||
| 371 | |||
| 372 | .text-center .btn-red-kx { | ||
| 373 | border-radius: 50px; | ||
| 374 | font-size: 28rpx; | ||
| 375 | } | ||
| 376 | :deep(.file-picker__progress){opacity: 0;} | ||
| 377 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -47,7 +47,8 @@ | ... | @@ -47,7 +47,8 @@ |
| 47 | 47 | ||
| 48 | <script setup> | 48 | <script setup> |
| 49 | import * as api from '@/common/api.js' | 49 | import * as api from '@/common/api.js' |
| 50 | import config from '@/config.js' | 50 | import config from '@/config.js' |
| 51 | import {szToHz} from '@/common/utils.js' | ||
| 51 | import { | 52 | import { |
| 52 | onMounted, | 53 | onMounted, |
| 53 | ref | 54 | ref |
| ... | @@ -58,8 +59,9 @@ | ... | @@ -58,8 +59,9 @@ |
| 58 | import _ from 'lodash' | 59 | import _ from 'lodash' |
| 59 | const queryParams = ref({ | 60 | const queryParams = ref({ |
| 60 | pageNum: 1, | 61 | pageNum: 1, |
| 61 | pageSize: 20 | 62 | pageSize: 10 |
| 62 | }) | 63 | }) |
| 64 | const studentquery = ref({}) | ||
| 63 | const paging = ref(null) | 65 | const paging = ref(null) |
| 64 | const userType = ref('') | 66 | const userType = ref('') |
| 65 | const list = ref([]) | 67 | const list = ref([]) |
| ... | @@ -67,94 +69,76 @@ | ... | @@ -67,94 +69,76 @@ |
| 67 | const total = ref(0) | 69 | const total = ref(0) |
| 68 | const app = getApp(); | 70 | const app = getApp(); |
| 69 | onLoad((option)=>{ | 71 | onLoad((option)=>{ |
| 70 | console.log(option) | 72 | if ('studentquery' in option) { |
| 71 | if ('obj' in option) { | 73 | studentquery.value = JSON.parse(decodeURIComponent(option.studentquery)) |
| 72 | queryParams.value = JSON.parse(decodeURIComponent(option.obj)) | 74 | queryParams.value.examId = studentquery.value.examId |
| 73 | } | 75 | } |
| 74 | if (app.globalData.isLogin) { | 76 | if (app.globalData.isLogin) { |
| 75 | userType.value = app.globalData.userType | 77 | userType.value = app.globalData.userType |
| 76 | } else { | 78 | } else { |
| 77 | |||
| 78 | app.firstLoadCallback = () => { | 79 | app.firstLoadCallback = () => { |
| 79 | userType.value = app.globalData.userType | 80 | userType.value = app.globalData.userType |
| 80 | }; | 81 | }; |
| 81 | } | 82 | } |
| 82 | }) | 83 | }) |
| 83 | onMounted(() => { | 84 | onMounted(() => { |
| 84 | getList() | 85 | // getList() |
| 85 | }) | 86 | }) |
| 86 | 87 | ||
| 87 | function getList() { | 88 | function getList() { |
| 88 | api.getStudentList(queryParams.value).then(res => { | 89 | api.getStudentList(queryParams.value).then(res => { |
| 89 | paging.value.complete(res.rows); | 90 | paging.value.complete(res.rows); |
| 90 | 91 | if(!studentquery.value.recordId){ | |
| 91 | const levelArr = [] | 92 | getVipData({ |
| 92 | let total = 0 | ||
| 93 | if(!queryParams.value.recordId){ | ||
| 94 | var obj = { | ||
| 95 | examId:queryParams.value.examId, | 93 | examId:queryParams.value.examId, |
| 96 | type:'1' | 94 | type:'1' |
| 97 | } | 95 | }) |
| 98 | }else{ | 96 | }else{ |
| 99 | var obj = { | 97 | getVipData({ |
| 100 | examId:queryParams.value.examId, | 98 | examId:queryParams.value.examId, |
| 101 | recordId:queryParams.value.recordId, | 99 | recordId:studentquery.value.recordId, |
| 102 | type:'1' | 100 | type:'1' |
| 103 | } | 101 | }) |
| 104 | } | 102 | } |
| 105 | api.getExamPersonNum(obj).then(res=>{ | ||
| 106 | _.each(res.data, (val, key) => { | ||
| 107 | if (val > 0) { | ||
| 108 | levelArr.push({ | ||
| 109 | level: key, | ||
| 110 | num: val | ||
| 111 | }) | ||
| 112 | total += val | ||
| 113 | } | ||
| 114 | }) | ||
| 115 | |||
| 116 | tablePersonInfo.value = { | ||
| 117 | total: total, | ||
| 118 | levelArr: _.sortBy(levelArr, (l) => { | ||
| 119 | return l.level | ||
| 120 | }) | ||
| 121 | } | ||
| 122 | }) | ||
| 123 | |||
| 124 | }) | 103 | }) |
| 125 | } | 104 | } |
| 105 | function getVipData(obj){ | ||
| 106 | const levelArr = [] | ||
| 107 | let total = 0 | ||
| 108 | if(!queryParams.value.examId) return | ||
| 109 | api.getExamPersonNum(obj).then(res=>{ | ||
| 110 | _.each(res.data, (val, key) => { | ||
| 111 | if (val > 0) { | ||
| 112 | levelArr.push({ | ||
| 113 | level: key, | ||
| 114 | num: val | ||
| 115 | }) | ||
| 116 | total += val | ||
| 117 | } | ||
| 118 | }) | ||
| 119 | |||
| 120 | tablePersonInfo.value = { | ||
| 121 | total: total, | ||
| 122 | levelArr: _.sortBy(levelArr, (l) => { | ||
| 123 | return l.level | ||
| 124 | }) | ||
| 125 | } | ||
| 126 | }) | ||
| 127 | } | ||
| 126 | function getQuery(pageNum,pageSize) { | 128 | function getQuery(pageNum,pageSize) { |
| 127 | queryParams.value.pageNum = pageNum | 129 | // if(total.value>0&&list.value.length>=total.value){ |
| 130 | // return | ||
| 131 | // } | ||
| 132 | queryParams.value.pageNum = pageNum, | ||
| 128 | queryParams.value.pageSize = pageSize | 133 | queryParams.value.pageSize = pageSize |
| 129 | api.getStudentList(queryParams.value).then(res=>{ | 134 | api.getStudentList(queryParams.value).then(res=>{ |
| 130 | paging.value.complete(res.rows); | 135 | paging.value.complete(res.rows); |
| 131 | // total.value = res.total | 136 | total.value = res.total |
| 132 | 137 | getVipData({ | |
| 133 | const levelArr = [] | 138 | examId:queryParams.value.examId, |
| 134 | let total = 0 | 139 | type:'1' |
| 135 | api.getExamPersonNum(queryParams.value.examId, '1').then(res=>{ | ||
| 136 | _.each(res.data, (val, key) => { | ||
| 137 | if (val > 0) { | ||
| 138 | levelArr.push({ | ||
| 139 | level: key, | ||
| 140 | num: val | ||
| 141 | }) | ||
| 142 | total += val | ||
| 143 | } | ||
| 144 | }) | ||
| 145 | |||
| 146 | tablePersonInfo.value = { | ||
| 147 | total: total, | ||
| 148 | levelArr: _.sortBy(levelArr, (l) => { | ||
| 149 | return l.level | ||
| 150 | }) | ||
| 151 | } | ||
| 152 | }) | 140 | }) |
| 153 | }) | 141 | }) |
| 154 | } | ||
| 155 | function szToHz(num) { | ||
| 156 | const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'] | ||
| 157 | return hzArr[parseInt(num)] | ||
| 158 | } | 142 | } |
| 159 | </script> | 143 | </script> |
| 160 | 144 | ... | ... |
| ... | @@ -44,7 +44,8 @@ | ... | @@ -44,7 +44,8 @@ |
| 44 | 44 | ||
| 45 | <script setup> | 45 | <script setup> |
| 46 | import * as api from '@/common/api.js' | 46 | import * as api from '@/common/api.js' |
| 47 | import config from '@/config.js' | 47 | import config from '@/config.js' |
| 48 | import {szToHz} from '@/common/utils.js' | ||
| 48 | import { | 49 | import { |
| 49 | ref, | 50 | ref, |
| 50 | getCurrentInstance | 51 | getCurrentInstance |
| ... | @@ -80,12 +81,6 @@ | ... | @@ -80,12 +81,6 @@ |
| 80 | }) | 81 | }) |
| 81 | } | 82 | } |
| 82 | 83 | ||
| 83 | function szToHz(num) { | ||
| 84 | const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'] | ||
| 85 | return hzArr[parseInt(num)] | ||
| 86 | } | ||
| 87 | |||
| 88 | |||
| 89 | function sendCert(row) { | 84 | function sendCert(row) { |
| 90 | let msg | 85 | let msg |
| 91 | if(row.isCert==1){ | 86 | if(row.isCert==1){ | ... | ... |
File moved
| ... | @@ -139,7 +139,7 @@ function register() { | ... | @@ -139,7 +139,7 @@ function register() { |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | function goLogin() { | 141 | function goLogin() { |
| 142 | let path = '/pages/index/login'; | 142 | let path = '/login/login'; |
| 143 | uni.navigateTo({ | 143 | uni.navigateTo({ |
| 144 | url: path | 144 | url: path |
| 145 | }); | 145 | }); |
| ... | @@ -225,7 +225,7 @@ function timeup() { | ... | @@ -225,7 +225,7 @@ function timeup() { |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | .formbox { | 227 | .formbox { |
| 228 | background: #fff; | 228 | background: #fff;box-sizing: border-box; |
| 229 | width: 700rpx; | 229 | width: 700rpx; |
| 230 | padding: 30rpx 50rpx; | 230 | padding: 30rpx 50rpx; |
| 231 | margin: auto; | 231 | margin: auto; | ... | ... |
| ... | @@ -38,10 +38,7 @@ | ... | @@ -38,10 +38,7 @@ |
| 38 | "quickapp" : {}, | 38 | "quickapp" : {}, |
| 39 | /* 小程序特有相关 */ | 39 | /* 小程序特有相关 */ |
| 40 | "mp-weixin" : { | 40 | "mp-weixin" : { |
| 41 | "appid" : "wx70f16625f10de4fe", //J系统 | 41 | "appid" : "wx523ee37fff4fea9d", |
| 42 | |||
| 43 | // "appid" : "wx70f16625f10de4fe",//新跆联 | ||
| 44 | // "appid" : "wx5e2471ed6210c3a6", | ||
| 45 | "setting" : { | 42 | "setting" : { |
| 46 | "urlCheck" : false, | 43 | "urlCheck" : false, |
| 47 | "minified" : false, | 44 | "minified" : false, | ... | ... |
| ... | @@ -11,20 +11,6 @@ | ... | @@ -11,20 +11,6 @@ |
| 11 | } | 11 | } |
| 12 | }, | 12 | }, |
| 13 | { | 13 | { |
| 14 | "path": "pages/index/login", | ||
| 15 | "style": { | ||
| 16 | "navigationBarTitleText": "登录", | ||
| 17 | "enablePullDownRefresh": false, | ||
| 18 | "navigationStyle": "custom" | ||
| 19 | } | ||
| 20 | }, { | ||
| 21 | "path": "pages/index/register", | ||
| 22 | "style": { | ||
| 23 | "navigationBarTitleText": "注册", | ||
| 24 | "enablePullDownRefresh": false, | ||
| 25 | "navigationStyle": "custom" | ||
| 26 | } | ||
| 27 | }, { | ||
| 28 | "path": "pages/index/msgList", | 14 | "path": "pages/index/msgList", |
| 29 | "style": { | 15 | "style": { |
| 30 | "navigationBarTitleText": "待办列表", | 16 | "navigationBarTitleText": "待办列表", |
| ... | @@ -114,7 +100,25 @@ | ... | @@ -114,7 +100,25 @@ |
| 114 | "navigationBarBackgroundColor": "#ffffff", | 100 | "navigationBarBackgroundColor": "#ffffff", |
| 115 | "navigationBarTitleText": "中跆协-工作台" | 101 | "navigationBarTitleText": "中跆协-工作台" |
| 116 | }, | 102 | }, |
| 117 | "subPackages": [{ | 103 | "subPackages": [ |
| 104 | { | ||
| 105 | "root": "login", | ||
| 106 | "pages": [{ | ||
| 107 | "path": "login", | ||
| 108 | "style": { | ||
| 109 | "navigationBarTitleText": "登录", | ||
| 110 | "enablePullDownRefresh": false, | ||
| 111 | "navigationStyle": "custom" | ||
| 112 | } | ||
| 113 | }, { | ||
| 114 | "path": "register", | ||
| 115 | "style": { | ||
| 116 | "navigationBarTitleText": "注册", | ||
| 117 | "enablePullDownRefresh": false, | ||
| 118 | "navigationStyle": "custom" | ||
| 119 | } | ||
| 120 | }] | ||
| 121 | },{ | ||
| 118 | "root": "personalVip", | 122 | "root": "personalVip", |
| 119 | "pages": [{ | 123 | "pages": [{ |
| 120 | "path": "addVip", | 124 | "path": "addVip", |
| ... | @@ -230,6 +234,70 @@ | ... | @@ -230,6 +234,70 @@ |
| 230 | "navigationBarTitleText": "会员缴费人员列表", | 234 | "navigationBarTitleText": "会员缴费人员列表", |
| 231 | "enablePullDownRefresh": false | 235 | "enablePullDownRefresh": false |
| 232 | } | 236 | } |
| 237 | }, | ||
| 238 | { | ||
| 239 | "path" : "changeVip", | ||
| 240 | "style" : | ||
| 241 | { | ||
| 242 | "navigationBarTitleText" : "会员信息变更", | ||
| 243 | "enablePullDownRefresh" : false | ||
| 244 | } | ||
| 245 | }, | ||
| 246 | { | ||
| 247 | "path" : "addChange", | ||
| 248 | "style" : | ||
| 249 | { | ||
| 250 | "navigationBarTitleText" : "新增变更", | ||
| 251 | "enablePullDownRefresh" : false | ||
| 252 | } | ||
| 253 | }, | ||
| 254 | { | ||
| 255 | "path" : "changeVipDetail", | ||
| 256 | "style" : | ||
| 257 | { | ||
| 258 | "navigationBarTitleText" : "详情", | ||
| 259 | "enablePullDownRefresh" : false | ||
| 260 | } | ||
| 261 | }, | ||
| 262 | { | ||
| 263 | "path" : "changeVipAudit", | ||
| 264 | "style" : | ||
| 265 | { | ||
| 266 | "navigationBarTitleText" : "会员信息变更审核", | ||
| 267 | "enablePullDownRefresh" : false | ||
| 268 | } | ||
| 269 | }, | ||
| 270 | { | ||
| 271 | "path" : "changeLevel", | ||
| 272 | "style" : | ||
| 273 | { | ||
| 274 | "navigationBarTitleText" : "级位变更审核", | ||
| 275 | "enablePullDownRefresh" : false | ||
| 276 | } | ||
| 277 | }, | ||
| 278 | { | ||
| 279 | "path" : "addChangeLevel", | ||
| 280 | "style" : | ||
| 281 | { | ||
| 282 | "navigationBarTitleText" : "新建级位变更", | ||
| 283 | "enablePullDownRefresh" : false | ||
| 284 | } | ||
| 285 | }, | ||
| 286 | { | ||
| 287 | "path" : "changeLevelDetail", | ||
| 288 | "style" : | ||
| 289 | { | ||
| 290 | "navigationBarTitleText" : "级位变更详情", | ||
| 291 | "enablePullDownRefresh" : false | ||
| 292 | } | ||
| 293 | }, | ||
| 294 | { | ||
| 295 | "path" : "changeLevelAudit", | ||
| 296 | "style" : | ||
| 297 | { | ||
| 298 | "navigationBarTitleText" : "级位变更审批", | ||
| 299 | "enablePullDownRefresh" : false | ||
| 300 | } | ||
| 233 | }] | 301 | }] |
| 234 | }, { | 302 | }, { |
| 235 | "root": "group", | 303 | "root": "group", |
| ... | @@ -327,6 +395,38 @@ | ... | @@ -327,6 +395,38 @@ |
| 327 | "navigationBarTitleText": "会员列表", | 395 | "navigationBarTitleText": "会员列表", |
| 328 | "enablePullDownRefresh": false | 396 | "enablePullDownRefresh": false |
| 329 | } | 397 | } |
| 398 | }, | ||
| 399 | { | ||
| 400 | "path" : "changeGroupInfo", | ||
| 401 | "style" : | ||
| 402 | { | ||
| 403 | "navigationBarTitleText" : "团体会员信息修改", | ||
| 404 | "enablePullDownRefresh" : false | ||
| 405 | } | ||
| 406 | }, | ||
| 407 | { | ||
| 408 | "path" : "changeGroupAudit", | ||
| 409 | "style" : | ||
| 410 | { | ||
| 411 | "navigationBarTitleText" : "团体信息变更审核", | ||
| 412 | "enablePullDownRefresh" : false | ||
| 413 | } | ||
| 414 | }, | ||
| 415 | { | ||
| 416 | "path" : "changeGroupDetail", | ||
| 417 | "style" : | ||
| 418 | { | ||
| 419 | "navigationBarTitleText" : "团体信息变更详情", | ||
| 420 | "enablePullDownRefresh" : false | ||
| 421 | } | ||
| 422 | }, | ||
| 423 | { | ||
| 424 | "path" : "newChange", | ||
| 425 | "style" : | ||
| 426 | { | ||
| 427 | "navigationBarTitleText" : "新建团体信息变更", | ||
| 428 | "enablePullDownRefresh" : false | ||
| 429 | } | ||
| 330 | }] | 430 | }] |
| 331 | },{ | 431 | },{ |
| 332 | "root": "level", | 432 | "root": "level", |
| ... | @@ -429,11 +529,29 @@ | ... | @@ -429,11 +529,29 @@ |
| 429 | "enablePullDownRefresh": false | 529 | "enablePullDownRefresh": false |
| 430 | } | 530 | } |
| 431 | }] | 531 | }] |
| 532 | },{ | ||
| 533 | "root": "training", | ||
| 534 | "pages":[{ | ||
| 535 | "path" : "trainList", | ||
| 536 | "style" : | ||
| 537 | { | ||
| 538 | "navigationBarTitleText" : "培训列表", | ||
| 539 | "enablePullDownRefresh" : false | ||
| 540 | } | ||
| 541 | }, | ||
| 542 | { | ||
| 543 | "path" : "detailPage", | ||
| 544 | "style" : | ||
| 545 | { | ||
| 546 | "navigationBarTitleText" : "培训详情", | ||
| 547 | "enablePullDownRefresh" : false | ||
| 548 | } | ||
| 549 | }] | ||
| 432 | }], | 550 | }], |
| 433 | "preloadRule": { | 551 | "preloadRule": { |
| 434 | "pages/index/index": { | 552 | "pages/index/index": { |
| 435 | "network": "all", | 553 | "network": "all", |
| 436 | "packages": ["personalVip", "group","level"] | 554 | "packages": ["login","personalVip", "group","level","training"] |
| 437 | } | 555 | } |
| 438 | } | 556 | } |
| 439 | } | 557 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
This diff could not be displayed because it is too large.
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <view v-if="userType=='1'" class="girdBox f3"> | 3 | <view v-if="userType=='1'" class="girdBox f3"> |
| 4 | <view @click="goPath('/pages/rank/approval?type=2')"> | ||
| 5 | <image :src="config.baseUrl_api+'/fs/static/icon/19.png'" />段位考试审核 | ||
| 6 | </view> | ||
| 7 | <view @click="goPath('/pages/rank/scoreApproval?type=2')"> | ||
| 8 | <image :src="config.baseUrl_api+'/fs/static/icon/19.png'" />考段成绩审核 | ||
| 9 | </view> | ||
| 10 | <view @click="goPath('/level/ztx/cert?type=2')"> | ||
| 11 | <image :src="config.baseUrl_api+'/fs/static/icon/20.png'" />考段证书发布 | ||
| 12 | </view> | ||
| 4 | <view @click="goPath('/pages/rank/approval?type=3')"> | 13 | <view @click="goPath('/pages/rank/approval?type=3')"> |
| 5 | <image :src="config.baseUrl_api+'/fs/static/icon/21.png'" />越段考试审核 | 14 | <image :src="config.baseUrl_api+'/fs/static/icon/21.png'" />越段考试审核 |
| 6 | </view> | 15 | </view> |
| ... | @@ -12,6 +21,16 @@ | ... | @@ -12,6 +21,16 @@ |
| 12 | </view> | 21 | </view> |
| 13 | </view> | 22 | </view> |
| 14 | <view class="girdBox" v-if="userType=='2'"> | 23 | <view class="girdBox" v-if="userType=='2'"> |
| 24 | <view @click="goPath('/group/feeBill')"> | ||
| 25 | <image :src="config.baseUrl_api+'/fs/static/icon/17.png'" />团体会员缴费单 | ||
| 26 | </view> | ||
| 27 | <view @click="goPath('/level/approval')"> | ||
| 28 | <image :src="config.baseUrl_api+'/fs/static/icon/3.png'" />级位考试审核 | ||
| 29 | </view> | ||
| 30 | <view @click="goPath('/pages/exam/payment?type=1')"> | ||
| 31 | <image :src="config.baseUrl_api+'/fs/static/icon/10.png'" />级位考试缴费单 | ||
| 32 | </view> | ||
| 33 | |||
| 15 | <view @click="goPath('/pages/rank/apply?type=2')"> | 34 | <view @click="goPath('/pages/rank/apply?type=2')"> |
| 16 | <image :src="config.baseUrl_api+'/fs/static/icon/11.png'" />段位考试申请 | 35 | <image :src="config.baseUrl_api+'/fs/static/icon/11.png'" />段位考试申请 |
| 17 | </view> | 36 | </view> | ... | ... |
personalVip/addChange.vue
0 → 100644
This diff is collapsed.
Click to expand it.
personalVip/addChangeLevel.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -2,10 +2,10 @@ | ... | @@ -2,10 +2,10 @@ |
| 2 | <view class="hasfixedbottom"> | 2 | <view class="hasfixedbottom"> |
| 3 | <view class="nolineform"> | 3 | <view class="nolineform"> |
| 4 | <uni-forms :border="true" :modelValue="baseFormData" label-width="120"> | 4 | <uni-forms :border="true" :modelValue="baseFormData" label-width="120"> |
| 5 | <uni-forms-item label="姓名" required name="name"> | 5 | <!-- <uni-forms-item label="姓名" required name="name"> |
| 6 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" | 6 | <uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle" |
| 7 | v-model="baseFormData.name" placeholder="请输入姓名" /> | 7 | v-model="baseFormData.name" placeholder="请输入姓名" /> |
| 8 | </uni-forms-item> | 8 | </uni-forms-item> --> |
| 9 | <uni-forms-item label="证件类型" required name="idcType"> | 9 | <uni-forms-item label="证件类型" required name="idcType"> |
| 10 | <uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList" | 10 | <uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList" |
| 11 | :clear="false"></uni-data-select> | 11 | :clear="false"></uni-data-select> |
| ... | @@ -25,7 +25,7 @@ | ... | @@ -25,7 +25,7 @@ |
| 25 | <view>人数合计 <text class="text-danger"> {{ total}} </text> 人</view> | 25 | <view>人数合计 <text class="text-danger"> {{ total}} </text> 人</view> |
| 26 | </view> | 26 | </view> |
| 27 | <uni-swipe-action> | 27 | <uni-swipe-action> |
| 28 | <uni-swipe-action-item class="personitem" v-for="n in list"> | 28 | <uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index"> |
| 29 | <view class="content-box" @click="handleInfo(n)"> | 29 | <view class="content-box" @click="handleInfo(n)"> |
| 30 | <view class="flexbox"> | 30 | <view class="flexbox"> |
| 31 | <view class="photobox"> | 31 | <view class="photobox"> |
| ... | @@ -84,6 +84,10 @@ | ... | @@ -84,6 +84,10 @@ |
| 84 | { | 84 | { |
| 85 | value: '3', | 85 | value: '3', |
| 86 | text: "外国护照" | 86 | text: "外国护照" |
| 87 | }, | ||
| 88 | { | ||
| 89 | value: '4', | ||
| 90 | text: "其他" | ||
| 87 | } | 91 | } |
| 88 | ]) | 92 | ]) |
| 89 | const baseFormData = ref({ | 93 | const baseFormData = ref({ |
| ... | @@ -104,13 +108,13 @@ | ... | @@ -104,13 +108,13 @@ |
| 104 | }) | 108 | }) |
| 105 | // 查询会员 | 109 | // 查询会员 |
| 106 | function selectMember() { | 110 | function selectMember() { |
| 107 | if (!baseFormData.value.name) { | 111 | // if (!baseFormData.value.name) { |
| 108 | uni.showToast({ | 112 | // uni.showToast({ |
| 109 | title: '请输入姓名', | 113 | // title: '请输入姓名', |
| 110 | icon: 'none' | 114 | // icon: 'none' |
| 111 | }) | 115 | // }) |
| 112 | return | 116 | // return |
| 113 | } | 117 | // } |
| 114 | 118 | ||
| 115 | if (!baseFormData.value.idcCode) { | 119 | if (!baseFormData.value.idcCode) { |
| 116 | uni.showToast({ | 120 | uni.showToast({ |
| ... | @@ -120,7 +124,7 @@ | ... | @@ -120,7 +124,7 @@ |
| 120 | return | 124 | return |
| 121 | } | 125 | } |
| 122 | 126 | ||
| 123 | 127 | baseFormData.value.fromTransfer = '1' | |
| 124 | api.pickUp(baseFormData.value).then(res => { | 128 | api.pickUp(baseFormData.value).then(res => { |
| 125 | baseFormData.value.perId = res.data.perId | 129 | baseFormData.value.perId = res.data.perId |
| 126 | baseFormData.value.ancestorNameList = res.data.ancestorNameList | 130 | baseFormData.value.ancestorNameList = res.data.ancestorNameList |
| ... | @@ -134,13 +138,13 @@ | ... | @@ -134,13 +138,13 @@ |
| 134 | } | 138 | } |
| 135 | 139 | ||
| 136 | function submitForm() { | 140 | function submitForm() { |
| 137 | if (!baseFormData.value.name) { | 141 | // if (!baseFormData.value.name) { |
| 138 | uni.showToast({ | 142 | // uni.showToast({ |
| 139 | title: '请输入姓名', | 143 | // title: '请输入姓名', |
| 140 | icon: 'none' | 144 | // icon: 'none' |
| 141 | }) | 145 | // }) |
| 142 | return | 146 | // return |
| 143 | } | 147 | // } |
| 144 | 148 | ||
| 145 | if (!baseFormData.value.idcCode) { | 149 | if (!baseFormData.value.idcCode) { |
| 146 | uni.showToast({ | 150 | uni.showToast({ |
| ... | @@ -165,8 +169,8 @@ | ... | @@ -165,8 +169,8 @@ |
| 165 | title:'新增成功' | 169 | title:'新增成功' |
| 166 | }) | 170 | }) |
| 167 | } | 171 | } |
| 168 | baseFormData.value.rangeId = res.data | 172 | baseFormData.value.rangeId = res.data.rangeId |
| 169 | queryParams.value.rangeId = res.data | 173 | queryParams.value.rangeId = res.data.rangeId |
| 170 | flag.value = true | 174 | flag.value = true |
| 171 | baseFormData.value.idcType = '0' | 175 | baseFormData.value.idcType = '0' |
| 172 | baseFormData.value.idcCode = '' | 176 | baseFormData.value.idcCode = '' | ... | ... |
| ... | @@ -13,7 +13,7 @@ | ... | @@ -13,7 +13,7 @@ |
| 13 | v-model="baseFormData.name" placeholder="请输入姓名" /> | 13 | v-model="baseFormData.name" placeholder="请输入姓名" /> |
| 14 | </uni-forms-item> | 14 | </uni-forms-item> |
| 15 | <uni-forms-item label="证件类型" required name="idcType"> | 15 | <uni-forms-item label="证件类型" required name="idcType"> |
| 16 | <uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList"></uni-data-select> | 16 | <uni-data-select v-model="baseFormData.idcType" :clearable="false" :disabled="current === 0" :localdata="idcTypeList"></uni-data-select> |
| 17 | </uni-forms-item> | 17 | </uni-forms-item> |
| 18 | <uni-forms-item label="证件照" required name="picUrl" v-show="current === 1"> | 18 | <uni-forms-item label="证件照" required name="picUrl" v-show="current === 1"> |
| 19 | <view class="upCard"> | 19 | <view class="upCard"> |
| ... | @@ -54,11 +54,8 @@ | ... | @@ -54,11 +54,8 @@ |
| 54 | 54 | ||
| 55 | <uni-forms-item label="头像" required name="photo"> | 55 | <uni-forms-item label="头像" required name="photo"> |
| 56 | <uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1" | 56 | <uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1" |
| 57 | @select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker> | 57 | @select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker> |
| 58 | </uni-forms-item> | 58 | </uni-forms-item> |
| 59 | |||
| 60 | |||
| 61 | |||
| 62 | </view> | 59 | </view> |
| 63 | 60 | ||
| 64 | 61 | ||
| ... | @@ -105,6 +102,18 @@ | ... | @@ -105,6 +102,18 @@ |
| 105 | <button @click="closepopup" class="btn-red">我已阅读</button> | 102 | <button @click="closepopup" class="btn-red">我已阅读</button> |
| 106 | </view> | 103 | </view> |
| 107 | </uni-popup> | 104 | </uni-popup> |
| 105 | |||
| 106 | <uni-popup ref="infoConfirm" type="center"> | ||
| 107 | <view class="tt">确认信息</view> | ||
| 108 | <view class="popBody"> | ||
| 109 | <view> | ||
| 110 | |||
| 111 | </view> | ||
| 112 | |||
| 113 | <button @click="closepopup" class="btn-red">已确认</button> | ||
| 114 | </view> | ||
| 115 | </uni-popup> | ||
| 116 | |||
| 108 | </view> | 117 | </view> |
| 109 | </template> | 118 | </template> |
| 110 | 119 | ||
| ... | @@ -118,7 +127,8 @@ | ... | @@ -118,7 +127,8 @@ |
| 118 | } from '@dcloudio/uni-app' | 127 | } from '@dcloudio/uni-app' |
| 119 | import config from '@/config.js' | 128 | import config from '@/config.js' |
| 120 | const current = ref(0) | 129 | const current = ref(0) |
| 121 | const popup = ref(null) | 130 | const popup = ref(null) |
| 131 | const infoConfirm = ref(null) | ||
| 122 | const agree = ref(false) | 132 | const agree = ref(false) |
| 123 | const perId = ref() | 133 | const perId = ref() |
| 124 | const photoArr = ref([]) | 134 | const photoArr = ref([]) |
| ... | @@ -141,11 +151,7 @@ | ... | @@ -141,11 +151,7 @@ |
| 141 | { | 151 | { |
| 142 | value: '3', | 152 | value: '3', |
| 143 | text: "外国护照" | 153 | text: "外国护照" |
| 144 | }, | 154 | },{ |
| 145 | { | ||
| 146 | value: '4', | ||
| 147 | text: "其它" | ||
| 148 | }, { | ||
| 149 | value: '5', | 155 | value: '5', |
| 150 | text: '户口本' | 156 | text: '户口本' |
| 151 | } | 157 | } |
| ... | @@ -194,6 +200,9 @@ | ... | @@ -194,6 +200,9 @@ |
| 194 | function onClickItem(e) { | 200 | function onClickItem(e) { |
| 195 | if (current.value != e.currentIndex) { | 201 | if (current.value != e.currentIndex) { |
| 196 | current.value = e.currentIndex | 202 | current.value = e.currentIndex |
| 203 | } | ||
| 204 | if(current.value==0){ | ||
| 205 | baseFormData.value.idcType = '0' | ||
| 197 | } | 206 | } |
| 198 | } | 207 | } |
| 199 | 208 | ||
| ... | @@ -248,31 +257,71 @@ | ... | @@ -248,31 +257,71 @@ |
| 248 | icon: 'none' | 257 | icon: 'none' |
| 249 | }) | 258 | }) |
| 250 | } else { | 259 | } else { |
| 251 | let tmpStr = ""; | 260 | // let tmpStr = ""; |
| 252 | if (baseFormData.value.idcCode.length == 15) { | 261 | // if (baseFormData.value.idcCode.length == 15) { |
| 253 | tmpStr = baseFormData.value.idcCode.substring(6, 12); | 262 | // tmpStr = baseFormData.value.idcCode.substring(6, 12); |
| 254 | tmpStr = "19" + tmpStr; | 263 | // tmpStr = "19" + tmpStr; |
| 255 | tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6) | 264 | // tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6) |
| 256 | 265 | ||
| 257 | } else { | 266 | // } else { |
| 258 | tmpStr = baseFormData.value.idcCode.substring(6, 14); | 267 | // tmpStr = baseFormData.value.idcCode.substring(6, 14); |
| 259 | tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6) | 268 | // tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6) |
| 260 | 269 | ||
| 261 | } | 270 | // } |
| 262 | 271 | ||
| 263 | baseFormData.value.birth = tmpStr | 272 | // baseFormData.value.birth = tmpStr |
| 264 | 273 | ||
| 265 | const sse = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/ | 274 | // const sse = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/ |
| 266 | if (sse.test(baseFormData.value.idcCode)) { | 275 | // if (sse.test(baseFormData.value.idcCode)) { |
| 267 | const genderCode = baseFormData.value.idcCode.charAt(16) | 276 | // const genderCode = baseFormData.value.idcCode.charAt(16) |
| 268 | if (parseInt(genderCode) % 2 == 0) { | 277 | // if (parseInt(genderCode) % 2 == 0) { |
| 269 | baseFormData.value.sex = '1' | 278 | // baseFormData.value.sex = '1' |
| 270 | } else { | 279 | // } else { |
| 271 | baseFormData.value.sex = '0' | 280 | // baseFormData.value.sex = '0' |
| 272 | } | 281 | // } |
| 273 | } | 282 | // } |
| 283 | |||
| 284 | //如果老会员 | ||
| 285 | api.extractInfoFromChinaIdCard({ | ||
| 286 | idcCode:baseFormData.value.idcCode, | ||
| 287 | idcType:baseFormData.value.idcType, | ||
| 288 | perType:baseFormData.value.perType, | ||
| 289 | }).then(res=>{ | ||
| 290 | perId.value = res.data.perId | ||
| 291 | baseFormData.value.sex = res.data.sex | ||
| 292 | baseFormData.value.birth = res.data.birth | ||
| 293 | baseFormData.value.phone = res.data.phone | ||
| 294 | baseFormData.value.cityId = res.data.cityId | ||
| 295 | baseFormData.value.address = res.data.address | ||
| 296 | photoArr.value = [] | ||
| 297 | if(res.data.photo){ | ||
| 298 | baseFormData.value.photo = res.data.photo | ||
| 299 | let obj = { | ||
| 300 | url: config.baseUrl_api + res.data.photo, | ||
| 301 | name:'头像', | ||
| 302 | extname:'jpg' | ||
| 303 | } | ||
| 304 | photoArr.value.push(obj) | ||
| 305 | } | ||
| 306 | baseFormData.value.name = res.data.name | ||
| 307 | baseFormData.value.perId = res.data.perId | ||
| 308 | }) | ||
| 309 | |||
| 274 | } | 310 | } |
| 275 | } | 311 | } |
| 312 | if (baseFormData.value.idcType == 1||baseFormData.value.idcType == 3||baseFormData.value.idcType == 4){ | ||
| 313 | //转换为大写并判断位数12 | ||
| 314 | baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase() | ||
| 315 | // var regex = /^[a-zA-Z]/ | ||
| 316 | if(baseFormData.value.idcCode.length>12){ | ||
| 317 | uni.showToast({ | ||
| 318 | icon: 'none', | ||
| 319 | title: '请输入正确的证件号', | ||
| 320 | duration: 2000 | ||
| 321 | }) | ||
| 322 | return | ||
| 323 | } | ||
| 324 | } | ||
| 276 | } | 325 | } |
| 277 | 326 | ||
| 278 | function changeSex(e) { | 327 | function changeSex(e) { |
| ... | @@ -320,9 +369,22 @@ | ... | @@ -320,9 +369,22 @@ |
| 320 | }) | 369 | }) |
| 321 | return | 370 | return |
| 322 | } | 371 | } |
| 372 | if (baseFormData.value.idcType == 1||baseFormData.value.idcType == 3||baseFormData.value.idcType == 4){ | ||
| 373 | //转换为大写并判断位数12 | ||
| 374 | baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase() | ||
| 375 | // var regex = /^[a-zA-Z]/ | ||
| 376 | if(baseFormData.value.idcCode.length>12){ | ||
| 377 | uni.showToast({ | ||
| 378 | icon: 'none', | ||
| 379 | title: '请输入正确的证件号', | ||
| 380 | duration: 2000 | ||
| 381 | }) | ||
| 382 | return | ||
| 383 | } | ||
| 384 | } | ||
| 323 | //信息确认弹出 | 385 | //信息确认弹出 |
| 324 | uni.showModal({ | 386 | uni.showModal({ |
| 325 | content: '确认信息正确', | 387 | content: '请确认信息正确', |
| 326 | success: function(res) { | 388 | success: function(res) { |
| 327 | if (res.confirm) { | 389 | if (res.confirm) { |
| 328 | api.addPersonToMyDept(baseFormData.value).then(res => { | 390 | api.addPersonToMyDept(baseFormData.value).then(res => { | ... | ... |
personalVip/changeLevel.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | <view class="invertedbtn-red" @click="goAdd">+ 新建级位变更</view> | ||
| 8 | </view> | ||
| 9 | |||
| 10 | <view class="appList"> | ||
| 11 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 12 | <view class="status" @click="goDetail(item)"> | ||
| 13 | <view> | ||
| 14 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 15 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 16 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 17 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 18 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 19 | </view> | ||
| 20 | </view> | ||
| 21 | |||
| 22 | <view class="name mt0" @click="goDetail(item)"> | ||
| 23 | {{item.code}}-{{item.shenMemName}} | ||
| 24 | </view> | ||
| 25 | <view class="flexbox" @click="goDetail(item)"> | ||
| 26 | <view> | ||
| 27 | 变更人数 | ||
| 28 | <view> | ||
| 29 | <text class="text-danger">{{item.count}}人</text> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | </view> | ||
| 33 | |||
| 34 | <view class="w50"> | ||
| 35 | 提交时间 | ||
| 36 | <view>{{item.commitTime||'--'}}</view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="func" v-if="(item.status==0||item.status==3||item.status==4)"> | ||
| 40 | <button @click="handleUpdate(item)">编辑</button> | ||
| 41 | <button @click="commitFN(item)">提交审核</button> | ||
| 42 | <button @click="handleDelete(item)">删除</button> | ||
| 43 | </view> | ||
| 44 | |||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | <view class="nodata" v-if="list.length==0"> | ||
| 51 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 52 | <text>暂无数据</text> | ||
| 53 | </view> | ||
| 54 | </view> | ||
| 55 | </template> | ||
| 56 | |||
| 57 | <script setup> | ||
| 58 | import * as api from '@/common/api.js' | ||
| 59 | import config from '@/config.js' | ||
| 60 | import { | ||
| 61 | ref | ||
| 62 | } from 'vue' | ||
| 63 | import { | ||
| 64 | onLoad, | ||
| 65 | onShow | ||
| 66 | } from '@dcloudio/uni-app' | ||
| 67 | const app = getApp(); | ||
| 68 | const queryParams = ref({ | ||
| 69 | code:'' | ||
| 70 | }) | ||
| 71 | const list = ref([]) | ||
| 72 | const total = ref(0) | ||
| 73 | onShow(()=>{ | ||
| 74 | getList() | ||
| 75 | }) | ||
| 76 | function goAdd(){ | ||
| 77 | let path = `/personalVip/addChangeLevel` | ||
| 78 | uni.navigateTo({ | ||
| 79 | url: path | ||
| 80 | }); | ||
| 81 | } | ||
| 82 | function getList(){ | ||
| 83 | uni.showLoading({ | ||
| 84 | title:'加载中' | ||
| 85 | }) | ||
| 86 | api.getChangelevelList(queryParams.value).then(res=>{ | ||
| 87 | list.value = res.rows | ||
| 88 | total.value = res.total | ||
| 89 | uni.hideLoading() | ||
| 90 | }) | ||
| 91 | } | ||
| 92 | function goDetail(item){ | ||
| 93 | let path = `/personalVip/changeLevelDetail?rangeId=${item.id}` | ||
| 94 | uni.navigateTo({ | ||
| 95 | url: path | ||
| 96 | }); | ||
| 97 | } | ||
| 98 | function handleUpdate(item){ | ||
| 99 | // 编辑 | ||
| 100 | let path = `/personalVip/addChangeLevel?rangeId=${item.id}` | ||
| 101 | uni.navigateTo({ | ||
| 102 | url: path | ||
| 103 | }); | ||
| 104 | } | ||
| 105 | function commitFN(row){ | ||
| 106 | uni.showModal({ | ||
| 107 | title: '提示', | ||
| 108 | content: `确定提交吗`, | ||
| 109 | success: function(res) { | ||
| 110 | if (res.confirm) { | ||
| 111 | api.commitLevelChange(row.id).then(Response=>{ | ||
| 112 | uni.showToast({ | ||
| 113 | icon:"none", | ||
| 114 | title:'提交成功!' | ||
| 115 | }) | ||
| 116 | getList() | ||
| 117 | }) | ||
| 118 | } | ||
| 119 | } | ||
| 120 | }) | ||
| 121 | } | ||
| 122 | function handleDelete(row){ | ||
| 123 | uni.showModal({ | ||
| 124 | title: '提示', | ||
| 125 | content: `确定删除吗`, | ||
| 126 | success: function(res) { | ||
| 127 | if (res.confirm) { | ||
| 128 | api.levelModRangeDelete([row.id]).then(Response=>{ | ||
| 129 | uni.showToast({ | ||
| 130 | icon:"none", | ||
| 131 | title:'删除成功!' | ||
| 132 | }) | ||
| 133 | getList() | ||
| 134 | }) | ||
| 135 | } | ||
| 136 | } | ||
| 137 | }) | ||
| 138 | } | ||
| 139 | |||
| 140 | </script> | ||
| 141 | |||
| 142 | <style lang='scss' scoped> | ||
| 143 | .searchbar { | ||
| 144 | display: flex; | ||
| 145 | align-items: center; | ||
| 146 | padding: 25rpx; | ||
| 147 | box-sizing: border-box; | ||
| 148 | |||
| 149 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 150 | border-radius: 35rpx; | ||
| 151 | border: none; | ||
| 152 | height: 70rpx; | ||
| 153 | } | ||
| 154 | |||
| 155 | :deep(.uni-easyinput__content-input) { | ||
| 156 | font-size: 26rpx; | ||
| 157 | } | ||
| 158 | |||
| 159 | .invertedbtn-red { | ||
| 160 | border-radius: 50px; | ||
| 161 | background-color: #fff; | ||
| 162 | |||
| 163 | font-size: 30rpx; | ||
| 164 | padding: 10rpx 20rpx; | ||
| 165 | } | ||
| 166 | } | ||
| 167 | |||
| 168 | </style> |
personalVip/changeLevelAudit.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | </view> | ||
| 8 | <view class="vipData"> | ||
| 9 | <view>级位变更人数合计: <text>{{statistical.personCount}}</text>人</view> | ||
| 10 | </view> | ||
| 11 | <view class="appList"> | ||
| 12 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 13 | <view class="status" @click="goDetail(item)"> | ||
| 14 | <view> | ||
| 15 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 16 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 17 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 18 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 19 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | |||
| 23 | <view class="name mt0" @click="goDetail(item)"> | ||
| 24 | {{item.code}}-{{item.shenMemName}} | ||
| 25 | </view> | ||
| 26 | <view class="flexbox" @click="goDetail(item)"> | ||
| 27 | <view> | ||
| 28 | 变更人数 | ||
| 29 | <view> | ||
| 30 | <text class="text-danger">{{item.count}}人</text> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | <view class="w50"> | ||
| 34 | 提交时间 | ||
| 35 | <view>{{item.commitTime||'--'}}</view> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | <view class="func" v-if="item.status==1"> | ||
| 39 | <button @click="audit(item.id,'0')">拒绝</button> | ||
| 40 | <button @click="audit(item.id,'1')">同意</button> | ||
| 41 | </view> | ||
| 42 | <view class="func" v-if="item.status==2"> | ||
| 43 | <button @click="handleDelete(item)">撤回</button> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | <view class="nodata" v-if="list.length==0"> | ||
| 48 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 49 | <text>暂无数据</text> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | </template> | ||
| 53 | |||
| 54 | <script setup> | ||
| 55 | import * as api from '@/common/api.js' | ||
| 56 | import config from '@/config.js' | ||
| 57 | import { | ||
| 58 | ref | ||
| 59 | } from 'vue' | ||
| 60 | import { | ||
| 61 | onLoad, | ||
| 62 | onShow | ||
| 63 | } from '@dcloudio/uni-app' | ||
| 64 | const app = getApp(); | ||
| 65 | const queryParams = ref({ | ||
| 66 | code: '', | ||
| 67 | ztxList: 0 | ||
| 68 | }) | ||
| 69 | const list = ref([]) | ||
| 70 | const statistical = ref({ | ||
| 71 | personCount: 0 | ||
| 72 | }) | ||
| 73 | const total = ref(0) | ||
| 74 | onShow(() => { | ||
| 75 | getList() | ||
| 76 | }) | ||
| 77 | |||
| 78 | function getList() { | ||
| 79 | uni.showLoading({ | ||
| 80 | title: '加载中' | ||
| 81 | }) | ||
| 82 | statistical.value.personCount = 0 | ||
| 83 | api.getChangelevelList(queryParams.value).then(res => { | ||
| 84 | list.value = res.rows | ||
| 85 | list.value.forEach(item => { | ||
| 86 | statistical.value.personCount += (item.count * 1) | ||
| 87 | }) | ||
| 88 | total.value = res.total | ||
| 89 | uni.hideLoading() | ||
| 90 | }) | ||
| 91 | } | ||
| 92 | |||
| 93 | function goDetail(item) { | ||
| 94 | let path = `/personalVip/changeLevelDetail?rangeId=${item.id}` | ||
| 95 | uni.navigateTo({ | ||
| 96 | url: path | ||
| 97 | }); | ||
| 98 | } | ||
| 99 | |||
| 100 | function handleDelete(row) { | ||
| 101 | uni.showModal({ | ||
| 102 | title: '提示', | ||
| 103 | content: `确定撤回吗`, | ||
| 104 | success: function(res) { | ||
| 105 | if (res.confirm) { | ||
| 106 | api.changeLevelWithDraw([row.id]).then(Response => { | ||
| 107 | uni.showToast({ | ||
| 108 | icon: "none", | ||
| 109 | title: '撤回成功!' | ||
| 110 | }) | ||
| 111 | getList() | ||
| 112 | }) | ||
| 113 | } | ||
| 114 | } | ||
| 115 | }) | ||
| 116 | } | ||
| 117 | |||
| 118 | function audit(id, flag) { | ||
| 119 | if (flag == 0) { | ||
| 120 | // 拒绝 | ||
| 121 | // 弹出框填写理由 | ||
| 122 | uni.showModal({ | ||
| 123 | title: '请输入拒绝理由', | ||
| 124 | editable: true, | ||
| 125 | success: function(res) { | ||
| 126 | if (res.confirm) { | ||
| 127 | if (!res.content) { | ||
| 128 | uni.showToast({ | ||
| 129 | title: '请输入拒绝理由', | ||
| 130 | icon: 'none' | ||
| 131 | }) | ||
| 132 | } else { | ||
| 133 | doApproval(id, flag, res.content) | ||
| 134 | } | ||
| 135 | } | ||
| 136 | } | ||
| 137 | }) | ||
| 138 | } else if (flag == '1') { | ||
| 139 | // 二次确认 | ||
| 140 | uni.showModal({ | ||
| 141 | title: '提示', | ||
| 142 | content: `确定审批通过吗`, | ||
| 143 | success: function(res) { | ||
| 144 | if (res.confirm) { | ||
| 145 | doApproval(id, flag) | ||
| 146 | } | ||
| 147 | } | ||
| 148 | }) | ||
| 149 | } | ||
| 150 | } | ||
| 151 | |||
| 152 | function doApproval(id, flag, reason) { | ||
| 153 | var obj = { | ||
| 154 | flag: flag, | ||
| 155 | reason: reason || '', | ||
| 156 | ids: [id] | ||
| 157 | } | ||
| 158 | console.log(obj) | ||
| 159 | api.changeLevelAudit(obj).then((res) => { | ||
| 160 | uni.showToast({ | ||
| 161 | title: '操作成功', | ||
| 162 | icon: 'none' | ||
| 163 | }) | ||
| 164 | getList() | ||
| 165 | }) | ||
| 166 | } | ||
| 167 | </script> | ||
| 168 | |||
| 169 | <style lang='scss' scoped> | ||
| 170 | .searchbar { | ||
| 171 | display: flex; | ||
| 172 | align-items: center; | ||
| 173 | padding: 25rpx; | ||
| 174 | box-sizing: border-box; | ||
| 175 | |||
| 176 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 177 | border-radius: 35rpx; | ||
| 178 | border: none; | ||
| 179 | height: 70rpx; | ||
| 180 | } | ||
| 181 | |||
| 182 | :deep(.uni-easyinput__content-input) { | ||
| 183 | font-size: 26rpx; | ||
| 184 | } | ||
| 185 | |||
| 186 | .invertedbtn-red { | ||
| 187 | border-radius: 50px; | ||
| 188 | background-color: #fff; | ||
| 189 | |||
| 190 | font-size: 30rpx; | ||
| 191 | padding: 10rpx 20rpx; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
personalVip/changeLevelDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="wBox"> | ||
| 4 | <uni-collapse> | ||
| 5 | <uni-collapse-item v-for="n in list" :key="n.id" :border="false" | ||
| 6 | :title="n.perName+' - '+ szToHz(n.oldJi)+'级'" title-border="none" open> | ||
| 7 | <view class="collapseBody"> | ||
| 8 | <view> | ||
| 9 | <label>变更后级别: </label> | ||
| 10 | <view class="content"> | ||
| 11 | {{szToHz(n.newJi)}}级 | ||
| 12 | </view> | ||
| 13 | </view> | ||
| 14 | <view> | ||
| 15 | <label>变更理由: </label> | ||
| 16 | <view class="content"> | ||
| 17 | {{reasonArr[Number(n.reason)-1]?.text}} | ||
| 18 | </view> | ||
| 19 | </view> | ||
| 20 | <view> | ||
| 21 | <label>附件: </label> | ||
| 22 | <view class="content"> | ||
| 23 | <view class="text-primary" @click="showImg(n)"> | ||
| 24 | 查看附件 | ||
| 25 | </view> | ||
| 26 | |||
| 27 | </view> | ||
| 28 | </view> | ||
| 29 | <view> | ||
| 30 | <label>级位编号: </label> | ||
| 31 | <view class="content"> | ||
| 32 | {{n.examPersonData.certCode}} | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | <view> | ||
| 36 | <label>证件类型: </label> | ||
| 37 | <view class="content">{{idcTypeList[n.idcType]?.text}}</view> | ||
| 38 | </view> | ||
| 39 | <view> | ||
| 40 | <label>证件编号: </label> | ||
| 41 | <view class="content">{{n.idcCode}}</view> | ||
| 42 | </view> | ||
| 43 | <view> | ||
| 44 | <label>通过日期: </label> | ||
| 45 | <view class="content">{{n.examPersonData.certTime.slice(0,10)}}</view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | </view> | ||
| 49 | </uni-collapse-item> | ||
| 50 | </uni-collapse> | ||
| 51 | |||
| 52 | </view> | ||
| 53 | </view> | ||
| 54 | </template> | ||
| 55 | |||
| 56 | <script setup> | ||
| 57 | import { | ||
| 58 | ref | ||
| 59 | } from 'vue' | ||
| 60 | import { | ||
| 61 | onLoad, | ||
| 62 | onShow | ||
| 63 | } from '@dcloudio/uni-app' | ||
| 64 | import { | ||
| 65 | szToHz | ||
| 66 | } from '@/common/utils.js' | ||
| 67 | import * as api from '@/common/api.js' | ||
| 68 | import config from '../config'; | ||
| 69 | const inputstyle = ref({ | ||
| 70 | borderColor: '#fff', | ||
| 71 | fontSize: '30rpx' | ||
| 72 | }) | ||
| 73 | const placeholderStyle = ref('text-align: right;font-size:30rpx') | ||
| 74 | const levelArr = ref([{ | ||
| 75 | text: '九级', | ||
| 76 | value: '9' | ||
| 77 | }, | ||
| 78 | { | ||
| 79 | text: '八级', | ||
| 80 | value: '8' | ||
| 81 | }, | ||
| 82 | { | ||
| 83 | text: '七级', | ||
| 84 | value: '7' | ||
| 85 | }, | ||
| 86 | { | ||
| 87 | text: '六级', | ||
| 88 | value: '6' | ||
| 89 | }, | ||
| 90 | { | ||
| 91 | text: '五级', | ||
| 92 | value: '5' | ||
| 93 | }, | ||
| 94 | { | ||
| 95 | text: '四级', | ||
| 96 | value: '4' | ||
| 97 | }, | ||
| 98 | { | ||
| 99 | text: '三级', | ||
| 100 | value: '3' | ||
| 101 | }, | ||
| 102 | { | ||
| 103 | text: '二级', | ||
| 104 | value: '2' | ||
| 105 | }, | ||
| 106 | { | ||
| 107 | text: '一级', | ||
| 108 | value: '1' | ||
| 109 | } | ||
| 110 | ]) | ||
| 111 | const reasonArr = ref([{ | ||
| 112 | text: '报错级位', | ||
| 113 | value: '1' | ||
| 114 | }, | ||
| 115 | { | ||
| 116 | text: '以前有级位无法报下一级', | ||
| 117 | value: '2' | ||
| 118 | }, | ||
| 119 | { | ||
| 120 | text: '其它', | ||
| 121 | value: '3' | ||
| 122 | } | ||
| 123 | ]) | ||
| 124 | const idcTypeList = ref([{ | ||
| 125 | value: '0', | ||
| 126 | text: "身份证" | ||
| 127 | }, | ||
| 128 | { | ||
| 129 | value: '1', | ||
| 130 | text: "港澳台通信身份证" | ||
| 131 | }, | ||
| 132 | { | ||
| 133 | value: '2', | ||
| 134 | text: "中国护照" | ||
| 135 | }, | ||
| 136 | { | ||
| 137 | value: '3', | ||
| 138 | text: "外国护照" | ||
| 139 | }, | ||
| 140 | { | ||
| 141 | value: '4', | ||
| 142 | text: "其它" | ||
| 143 | }, | ||
| 144 | { | ||
| 145 | value: '5', | ||
| 146 | text: "户口本" | ||
| 147 | } | ||
| 148 | ]) | ||
| 149 | const baseFormData = ref({ | ||
| 150 | idcType: '0' | ||
| 151 | }) | ||
| 152 | const list = ref([]) | ||
| 153 | const levelList = ref([]) | ||
| 154 | const total = ref(0) | ||
| 155 | const flag = ref(true) | ||
| 156 | const popup = ref(null) | ||
| 157 | const queryParams = ref({ | ||
| 158 | rangeId: '' | ||
| 159 | }) | ||
| 160 | onLoad((option) => { | ||
| 161 | if (option.rangeId) { | ||
| 162 | baseFormData.value.rangeId = option.rangeId | ||
| 163 | queryParams.value.rangeId = option.rangeId | ||
| 164 | } | ||
| 165 | }) | ||
| 166 | onShow(() => { | ||
| 167 | if (queryParams.value.rangeId != '') { | ||
| 168 | getList() | ||
| 169 | } | ||
| 170 | }) | ||
| 171 | // 查询会员 | ||
| 172 | function selectMember() { | ||
| 173 | if (!baseFormData.value.idcCode) { | ||
| 174 | uni.showToast({ | ||
| 175 | title: '请输入证件号', | ||
| 176 | icon: 'none' | ||
| 177 | }) | ||
| 178 | return | ||
| 179 | } | ||
| 180 | |||
| 181 | api.pickUpByPersonInfo(baseFormData.value).then(res => { | ||
| 182 | if (res.data.length == 0) { | ||
| 183 | uni.showModal({ | ||
| 184 | title: '提示', | ||
| 185 | content: '该会员无级位考试记录', | ||
| 186 | success: function(res) {} | ||
| 187 | }) | ||
| 188 | return | ||
| 189 | } | ||
| 190 | |||
| 191 | levelList.value = res.data | ||
| 192 | popup.value.open() | ||
| 193 | }) | ||
| 194 | } | ||
| 195 | |||
| 196 | function submitForm() { | ||
| 197 | if (!baseFormData.value.name) { | ||
| 198 | uni.showToast({ | ||
| 199 | title: '请输入姓名', | ||
| 200 | icon: 'none' | ||
| 201 | }) | ||
| 202 | return | ||
| 203 | } | ||
| 204 | |||
| 205 | if (!baseFormData.value.idcCode) { | ||
| 206 | uni.showToast({ | ||
| 207 | title: '请输入证件号', | ||
| 208 | icon: 'none' | ||
| 209 | }) | ||
| 210 | return | ||
| 211 | } | ||
| 212 | api.addTransferToRange({ | ||
| 213 | rangeId: baseFormData.value.rangeId || -1, | ||
| 214 | personIdArray: baseFormData.value.personIdArray | ||
| 215 | }).then(res => { | ||
| 216 | if (res.data.result == 0) { | ||
| 217 | uni.showModal({ | ||
| 218 | content: res.data?.list?.[0]?.msg, | ||
| 219 | success: function(res) { | ||
| 220 | |||
| 221 | } | ||
| 222 | }) | ||
| 223 | } else { | ||
| 224 | uni.showToast({ | ||
| 225 | title: '新增成功' | ||
| 226 | }) | ||
| 227 | } | ||
| 228 | baseFormData.value.rangeId = res.data | ||
| 229 | queryParams.value.rangeId = res.data | ||
| 230 | flag.value = true | ||
| 231 | baseFormData.value.idcType = '0' | ||
| 232 | baseFormData.value.idcCode = '' | ||
| 233 | baseFormData.value.name = '' | ||
| 234 | getList() | ||
| 235 | }) | ||
| 236 | } | ||
| 237 | |||
| 238 | function getList() { | ||
| 239 | uni.showLoading({ | ||
| 240 | title: '加载中' | ||
| 241 | }) | ||
| 242 | api.getLevelChangeAddList(queryParams.value).then(Response => { | ||
| 243 | list.value = Response.rows | ||
| 244 | for (var item of list.value) { | ||
| 245 | item.examPersonData = JSON.parse(item.examPersonData) | ||
| 246 | if (item.fileUrl) { | ||
| 247 | item.fileUrl = JSON.parse(item.fileUrl) | ||
| 248 | } | ||
| 249 | } | ||
| 250 | total.value = Response.total | ||
| 251 | uni.hideLoading() | ||
| 252 | }) | ||
| 253 | } | ||
| 254 | |||
| 255 | function showImg(n) { | ||
| 256 | var str= config.baseUrl_api + n.fileUrl[0]?.url | ||
| 257 | if(n.fileUrl[0]?.url.indexOf('png')>-1||n.fileUrl[0]?.url.indexOf('jpg')>-1||n.fileUrl[0]?.url.indexOf('jpeg')>-1){ | ||
| 258 | uni.previewImage({ | ||
| 259 | urls: [str], | ||
| 260 | success: function(res) { | ||
| 261 | console.log('success', res) | ||
| 262 | }, | ||
| 263 | fail: function(res) { | ||
| 264 | console.log('fail', res) | ||
| 265 | }, | ||
| 266 | complete: function(res) { | ||
| 267 | console.log('complete', res) | ||
| 268 | } | ||
| 269 | }) | ||
| 270 | }else{ | ||
| 271 | goWebView(str) | ||
| 272 | } | ||
| 273 | } | ||
| 274 | function goWebView(url){ | ||
| 275 | url = url.replace("http://", "https://") | ||
| 276 | uni.showLoading({ | ||
| 277 | title: '下载中' | ||
| 278 | }); | ||
| 279 | uni.downloadFile({ | ||
| 280 | url: url, | ||
| 281 | success: function(res) { | ||
| 282 | uni.hideLoading(); | ||
| 283 | var filePath = res.tempFilePath; | ||
| 284 | uni.showLoading({ | ||
| 285 | title: '正在打开' | ||
| 286 | }); | ||
| 287 | uni.openDocument({ | ||
| 288 | filePath: filePath, | ||
| 289 | showMenu: true, | ||
| 290 | success: function(res) { | ||
| 291 | uni.hideLoading(); | ||
| 292 | }, | ||
| 293 | fail: function(err) { | ||
| 294 | uni.hideLoading(); | ||
| 295 | uni.showToast({ | ||
| 296 | title: err, | ||
| 297 | icon: 'none', | ||
| 298 | duration: 2000 | ||
| 299 | }); | ||
| 300 | } | ||
| 301 | }); | ||
| 302 | }, | ||
| 303 | fail: function(error) { | ||
| 304 | uni.hideLoading(); | ||
| 305 | uni.showToast({ | ||
| 306 | title: `下载失败`, | ||
| 307 | icon: 'none', | ||
| 308 | duration: 2000 | ||
| 309 | }); | ||
| 310 | } | ||
| 311 | }); | ||
| 312 | } | ||
| 313 | </script> | ||
| 314 | |||
| 315 | <style scoped lang="scss"> | ||
| 316 | .wBox { | ||
| 317 | width: 700rpx; | ||
| 318 | margin: 20rpx auto 0; | ||
| 319 | background: #FFFFFF; | ||
| 320 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 321 | border-radius: 15rpx; | ||
| 322 | |||
| 323 | .tt { | ||
| 324 | color: #0A1629; | ||
| 325 | font-size: 30rpx; | ||
| 326 | } | ||
| 327 | } | ||
| 328 | |||
| 329 | .danger-button { | ||
| 330 | display: flex; | ||
| 331 | flex-direction: column; | ||
| 332 | align-items: center; | ||
| 333 | justify-content: center; | ||
| 334 | } | ||
| 335 | |||
| 336 | .collapseBody { | ||
| 337 | padding: 0 30rpx 50rpx; | ||
| 338 | box-sizing: border-box; | ||
| 339 | font-size: 28rpx; | ||
| 340 | } | ||
| 341 | |||
| 342 | .collapseBody>view { | ||
| 343 | margin: 0 0 20rpx; | ||
| 344 | display: flex; | ||
| 345 | align-items: baseline; | ||
| 346 | |||
| 347 | label { | ||
| 348 | width: 6em; | ||
| 349 | color: #999; | ||
| 350 | display: inline-block; | ||
| 351 | // text-align: right; | ||
| 352 | flex: 0 0 auto; | ||
| 353 | } | ||
| 354 | |||
| 355 | .content { | ||
| 356 | flex: 1 1 auto; | ||
| 357 | padding-left: 10rpx; | ||
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 | .button-group { | ||
| 362 | text-align: right; | ||
| 363 | |||
| 364 | button { | ||
| 365 | margin-left: 30rpx; | ||
| 366 | } | ||
| 367 | } | ||
| 368 | |||
| 369 | .h3 { | ||
| 370 | padding: 20rpx 0; | ||
| 371 | } | ||
| 372 | |||
| 373 | :deep(.uni-list-item__extra-text) { | ||
| 374 | color: #1561CB; | ||
| 375 | } | ||
| 376 | |||
| 377 | .popBody { | ||
| 378 | max-height: 60vh; | ||
| 379 | overflow: auto; | ||
| 380 | } | ||
| 381 | |||
| 382 | :deep(.uni-forms-item__inner) { | ||
| 383 | padding-bottom: 20rpx; | ||
| 384 | align-items: baseline; | ||
| 385 | } | ||
| 386 | |||
| 387 | // :deep(.uni-forms-item__label){ | ||
| 388 | // padding: 0;height: auto; | ||
| 389 | // } | ||
| 390 | // :deep(.uni-forms-item__content){ | ||
| 391 | // min-height: auto; | ||
| 392 | // } | ||
| 393 | .collapseTitle { | ||
| 394 | padding: 20rpx; | ||
| 395 | |||
| 396 | .name { | ||
| 397 | font-size: 30rpx; | ||
| 398 | } | ||
| 399 | |||
| 400 | .date { | ||
| 401 | color: #999; | ||
| 402 | font-size: 28rpx; | ||
| 403 | } | ||
| 404 | } | ||
| 405 | |||
| 406 | :deep(.file-picker__progress) { | ||
| 407 | opacity: 0; | ||
| 408 | } | ||
| 409 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
personalVip/changeVip.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | <view class="invertedbtn-red" @click="goAdd">+ 新建变更</view> | ||
| 8 | </view> | ||
| 9 | |||
| 10 | <view class="appList"> | ||
| 11 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 12 | <view class="status" @click="goDetail(item)"> | ||
| 13 | <view> | ||
| 14 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 15 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 16 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 17 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 18 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 19 | </view> | ||
| 20 | </view> | ||
| 21 | |||
| 22 | <view class="name mt0" @click="goDetail(item)"> | ||
| 23 | {{item.code}}-{{item.shenMemName}} | ||
| 24 | </view> | ||
| 25 | <view class="flexbox" @click="goDetail(item)"> | ||
| 26 | <view> | ||
| 27 | 变更人数 | ||
| 28 | <view> | ||
| 29 | <text class="text-danger">{{item.count}}人</text> | ||
| 30 | </view> | ||
| 31 | |||
| 32 | </view> | ||
| 33 | |||
| 34 | <view class="w50"> | ||
| 35 | 提交时间 | ||
| 36 | <view>{{item.commitTime||'--'}}</view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="func" v-if="(item.status==0||item.status==3||item.status==4)"> | ||
| 40 | <button @click="handleUpdate(item)">编辑</button> | ||
| 41 | <button @click="commitFN(item)">提交审核</button> | ||
| 42 | <button @click="handleDelete(item)">删除</button> | ||
| 43 | </view> | ||
| 44 | |||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | <view class="nodata" v-if="list.length==0"> | ||
| 51 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 52 | <text>暂无数据</text> | ||
| 53 | </view> | ||
| 54 | </view> | ||
| 55 | </template> | ||
| 56 | |||
| 57 | <script setup> | ||
| 58 | import * as api from '@/common/api.js' | ||
| 59 | import config from '@/config.js' | ||
| 60 | import { | ||
| 61 | ref | ||
| 62 | } from 'vue' | ||
| 63 | import { | ||
| 64 | onLoad, | ||
| 65 | onShow | ||
| 66 | } from '@dcloudio/uni-app' | ||
| 67 | const app = getApp(); | ||
| 68 | const queryParams = ref({ | ||
| 69 | code:'' | ||
| 70 | }) | ||
| 71 | const list = ref([]) | ||
| 72 | const total = ref(0) | ||
| 73 | onShow(()=>{ | ||
| 74 | getList() | ||
| 75 | }) | ||
| 76 | function goAdd(){ | ||
| 77 | let path = `/personalVip/addChange` | ||
| 78 | uni.navigateTo({ | ||
| 79 | url: path | ||
| 80 | }); | ||
| 81 | } | ||
| 82 | function getList(){ | ||
| 83 | uni.showLoading({ | ||
| 84 | title:'加载中' | ||
| 85 | }) | ||
| 86 | api.getInfoModRange(queryParams.value).then(res=>{ | ||
| 87 | list.value = res.rows | ||
| 88 | total.value = res.total | ||
| 89 | uni.hideLoading() | ||
| 90 | }) | ||
| 91 | } | ||
| 92 | function goDetail(item){ | ||
| 93 | let path = `/personalVip/changeVipDetail?rangeId=${item.id}` | ||
| 94 | uni.navigateTo({ | ||
| 95 | url: path | ||
| 96 | }); | ||
| 97 | } | ||
| 98 | function handleUpdate(item){ | ||
| 99 | // 编辑 | ||
| 100 | let path = `/personalVip/addChange?rangeId=${item.id}` | ||
| 101 | uni.navigateTo({ | ||
| 102 | url: path | ||
| 103 | }); | ||
| 104 | } | ||
| 105 | function commitFN(row){ | ||
| 106 | uni.showModal({ | ||
| 107 | title: '提示', | ||
| 108 | content: `确定提交吗`, | ||
| 109 | success: function(res) { | ||
| 110 | if (res.confirm) { | ||
| 111 | api.commitPersonalChange(row.id).then(Response=>{ | ||
| 112 | uni.showToast({ | ||
| 113 | icon:"none", | ||
| 114 | title:'提交成功!' | ||
| 115 | }) | ||
| 116 | getList() | ||
| 117 | }) | ||
| 118 | } | ||
| 119 | } | ||
| 120 | }) | ||
| 121 | } | ||
| 122 | function handleDelete(row){ | ||
| 123 | uni.showModal({ | ||
| 124 | title: '提示', | ||
| 125 | content: `确定删除吗`, | ||
| 126 | success: function(res) { | ||
| 127 | if (res.confirm) { | ||
| 128 | api.delPersonalChange([row.id]).then(Response=>{ | ||
| 129 | uni.showToast({ | ||
| 130 | icon:"none", | ||
| 131 | title:'删除成功!' | ||
| 132 | }) | ||
| 133 | getList() | ||
| 134 | }) | ||
| 135 | } | ||
| 136 | } | ||
| 137 | }) | ||
| 138 | } | ||
| 139 | |||
| 140 | </script> | ||
| 141 | |||
| 142 | <style lang='scss' scoped> | ||
| 143 | .searchbar { | ||
| 144 | display: flex; | ||
| 145 | align-items: center; | ||
| 146 | padding: 25rpx; | ||
| 147 | box-sizing: border-box; | ||
| 148 | |||
| 149 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 150 | border-radius: 35rpx; | ||
| 151 | border: none; | ||
| 152 | height: 70rpx; | ||
| 153 | } | ||
| 154 | |||
| 155 | :deep(.uni-easyinput__content-input) { | ||
| 156 | font-size: 26rpx; | ||
| 157 | } | ||
| 158 | |||
| 159 | .invertedbtn-red { | ||
| 160 | border-radius: 50px; | ||
| 161 | background-color: #fff; | ||
| 162 | |||
| 163 | font-size: 30rpx; | ||
| 164 | padding: 10rpx 20rpx; | ||
| 165 | } | ||
| 166 | } | ||
| 167 | |||
| 168 | </style> |
personalVip/changeVipAudit.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <view class="searchbar"> | ||
| 4 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | ||
| 5 | v-model="queryParams.code" placeholder="搜索变更单号" @blur="getList" @clear="getList"> | ||
| 6 | </uni-easyinput> | ||
| 7 | </view> | ||
| 8 | <view class="vipData"> | ||
| 9 | <view>会员信息变更人数合计: <text>{{statistical.personCount}}</text>人</view> | ||
| 10 | </view> | ||
| 11 | <view class="appList"> | ||
| 12 | <view class="appItem" v-for="(item,index) in list" :key="index"> | ||
| 13 | <view class="status" @click="goDetail(item)"> | ||
| 14 | <view> | ||
| 15 | <text v-if="item.status == 0" class="text-warning">待提交</text> | ||
| 16 | <text v-if="item.status == 1" class="text-primary">审核中</text> | ||
| 17 | <text v-if="item.status == 2" class="text-success">审核通过</text> | ||
| 18 | <text v-if="item.status == 3" class="text-danger">审核拒绝</text> | ||
| 19 | <text v-if="item.status == 4" class="text-warning">已撤回</text> | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | |||
| 23 | <view class="name mt0" @click="goDetail(item)"> | ||
| 24 | {{item.code}}-{{item.shenMemName}} | ||
| 25 | </view> | ||
| 26 | <view class="flexbox" @click="goDetail(item)"> | ||
| 27 | <view> | ||
| 28 | 变更人数 | ||
| 29 | <view> | ||
| 30 | <text class="text-danger">{{item.count}}人</text> | ||
| 31 | </view> | ||
| 32 | </view> | ||
| 33 | <view class="w50"> | ||
| 34 | 提交时间 | ||
| 35 | <view>{{item.commitTime||'--'}}</view> | ||
| 36 | </view> | ||
| 37 | </view> | ||
| 38 | <view class="func" v-if="item.status==1"> | ||
| 39 | <button @click="audit(item.id,0)">拒绝</button> | ||
| 40 | <button @click="audit(item.id,1)">同意</button> | ||
| 41 | </view> | ||
| 42 | <view class="func" v-if="item.status==2"> | ||
| 43 | <button @click="handleDelete(item)">撤回</button> | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | <view class="nodata" v-if="list.length==0"> | ||
| 48 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 49 | <text>暂无数据</text> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | </template> | ||
| 53 | |||
| 54 | <script setup> | ||
| 55 | import * as api from '@/common/api.js' | ||
| 56 | import config from '@/config.js' | ||
| 57 | import { | ||
| 58 | ref | ||
| 59 | } from 'vue' | ||
| 60 | import { | ||
| 61 | onLoad, | ||
| 62 | onShow | ||
| 63 | } from '@dcloudio/uni-app' | ||
| 64 | const app = getApp(); | ||
| 65 | const queryParams = ref({ | ||
| 66 | code:'', | ||
| 67 | ztxList: 0 | ||
| 68 | }) | ||
| 69 | const list = ref([]) | ||
| 70 | const statistical = ref({ | ||
| 71 | personCount: 0 | ||
| 72 | }) | ||
| 73 | const total = ref(0) | ||
| 74 | onShow(()=>{ | ||
| 75 | getList() | ||
| 76 | }) | ||
| 77 | function getList(){ | ||
| 78 | uni.showLoading({ | ||
| 79 | title:'加载中' | ||
| 80 | }) | ||
| 81 | api.getInfoModRange(queryParams.value).then(res=>{ | ||
| 82 | list.value = res.rows | ||
| 83 | list.value.forEach(item => { | ||
| 84 | statistical.value.personCount += (item.count * 1) | ||
| 85 | }) | ||
| 86 | total.value = res.total | ||
| 87 | uni.hideLoading() | ||
| 88 | }) | ||
| 89 | } | ||
| 90 | function goDetail(item){ | ||
| 91 | let path = `/personalVip/changeVipDetail?rangeId=${item.id}` | ||
| 92 | uni.navigateTo({ | ||
| 93 | url: path | ||
| 94 | }); | ||
| 95 | } | ||
| 96 | function handleDelete(row){ | ||
| 97 | uni.showModal({ | ||
| 98 | title: '提示', | ||
| 99 | content: `确定撤回吗`, | ||
| 100 | success: function(res) { | ||
| 101 | if (res.confirm) { | ||
| 102 | api.personChangeWithDraw([row.id]).then(Response=>{ | ||
| 103 | uni.showToast({ | ||
| 104 | icon:"none", | ||
| 105 | title:'撤回成功!' | ||
| 106 | }) | ||
| 107 | getList() | ||
| 108 | }) | ||
| 109 | } | ||
| 110 | } | ||
| 111 | }) | ||
| 112 | } | ||
| 113 | function audit(id, flag) { | ||
| 114 | if (flag == 0) { | ||
| 115 | // 拒绝 | ||
| 116 | // 弹出框填写理由 | ||
| 117 | uni.showModal({ | ||
| 118 | title: '请输入拒绝理由', | ||
| 119 | editable: true, | ||
| 120 | success: function(res) { | ||
| 121 | if (res.confirm) { | ||
| 122 | if (!res.content) { | ||
| 123 | uni.showToast({ | ||
| 124 | title: '请输入拒绝理由', | ||
| 125 | icon: 'none' | ||
| 126 | }) | ||
| 127 | } else { | ||
| 128 | doApproval(id, flag, res.content) | ||
| 129 | } | ||
| 130 | } | ||
| 131 | } | ||
| 132 | }) | ||
| 133 | } else if (flag == 1) { | ||
| 134 | // 二次确认 | ||
| 135 | uni.showModal({ | ||
| 136 | title: '提示', | ||
| 137 | content: `确定审批通过吗`, | ||
| 138 | success: function(res) { | ||
| 139 | if (res.confirm) { | ||
| 140 | doApproval(id, flag) | ||
| 141 | } | ||
| 142 | } | ||
| 143 | }) | ||
| 144 | } | ||
| 145 | } | ||
| 146 | |||
| 147 | function doApproval(id, flag, reason) { | ||
| 148 | var obj = { | ||
| 149 | flag: flag, | ||
| 150 | reason: reason || '', | ||
| 151 | ids: [id] | ||
| 152 | } | ||
| 153 | console.log(obj) | ||
| 154 | api.personChangeAudit(obj).then((res) => { | ||
| 155 | uni.showToast({ | ||
| 156 | title: '操作成功', | ||
| 157 | icon: 'none' | ||
| 158 | }) | ||
| 159 | getList() | ||
| 160 | }) | ||
| 161 | } | ||
| 162 | |||
| 163 | </script> | ||
| 164 | |||
| 165 | <style lang='scss' scoped> | ||
| 166 | .searchbar { | ||
| 167 | display: flex; | ||
| 168 | align-items: center; | ||
| 169 | padding: 25rpx; | ||
| 170 | box-sizing: border-box; | ||
| 171 | |||
| 172 | :deep(.uni-easyinput .uni-easyinput__content) { | ||
| 173 | border-radius: 35rpx; | ||
| 174 | border: none; | ||
| 175 | height: 70rpx; | ||
| 176 | } | ||
| 177 | |||
| 178 | :deep(.uni-easyinput__content-input) { | ||
| 179 | font-size: 26rpx; | ||
| 180 | } | ||
| 181 | |||
| 182 | .invertedbtn-red { | ||
| 183 | border-radius: 50px; | ||
| 184 | background-color: #fff; | ||
| 185 | |||
| 186 | font-size: 30rpx; | ||
| 187 | padding: 10rpx 20rpx; | ||
| 188 | } | ||
| 189 | } | ||
| 190 | |||
| 191 | </style> |
personalVip/changeVipDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view> | ||
| 3 | <uni-collapse> | ||
| 4 | <uni-collapse-item :title="n.personCode+' - '+n.oldName" v-for="n in list" :key="n.id" open> | ||
| 5 | <view class="collapseBody"> | ||
| 6 | <view> | ||
| 7 | <label>姓名:</label> | ||
| 8 | {{n.oldName}} | ||
| 9 | <text class="text-primary" v-if="n.oldName!=n.newName">变更为 </text> | ||
| 10 | <text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text> | ||
| 11 | </view> | ||
| 12 | <view> | ||
| 13 | <label>性别:</label> | ||
| 14 | {{ n.oldSex==0?'男':'女' }} | ||
| 15 | <text class="text-primary" v-if="n.oldSex!=n.newSex">变更为 </text> | ||
| 16 | <text class="text-danger" v-if="n.oldSex!=n.newSex">{{ n.newSex==0?'男':'女' }}</text> | ||
| 17 | </view> | ||
| 18 | <view> | ||
| 19 | <label>证件类型:</label> | ||
| 20 | {{ cardType[n.oldIdcType].label }} | ||
| 21 | <text class="text-primary" v-if="n.oldIdcType!=n.newIdcType">变更为 </text> | ||
| 22 | <text class="text-danger" v-if="n.oldIdcType!=n.newIdcType">{{ cardType[n.newIdcType].label }} | ||
| 23 | </text> | ||
| 24 | </view> | ||
| 25 | <view> | ||
| 26 | <label>证件号:</label> | ||
| 27 | {{ n.oldIdcCode }} | ||
| 28 | <text class="text-primary" v-if="n.oldIdcCode!=n.newIdcCode">变更为 </text> | ||
| 29 | <text class="text-danger" v-if="n.oldIdcCode!=n.newIdcCode">{{ n.newIdcCode }}</text> | ||
| 30 | </view> | ||
| 31 | <view> | ||
| 32 | <label>出生日期:</label> | ||
| 33 | {{ n.oldBirth?.slice(0,10) }} | ||
| 34 | <text v-if="n.oldBirth!=n.newBirth" class="text-gray">变更为 </text> | ||
| 35 | <text class="text-danger" v-if="n.oldBirth!=n.newBirth">{{ n.newBirth?.slice(0,10) }}</text> | ||
| 36 | </view> | ||
| 37 | <view v-if="n.fileUrl"> | ||
| 38 | <label>附件: </label> | ||
| 39 | <text class="text-primary" @click="showImg(n)"> | ||
| 40 | 查看附件 | ||
| 41 | </text> | ||
| 42 | </view> | ||
| 43 | <view> | ||
| 44 | <label>会员状态:</label> | ||
| 45 | <text class="text-primary" v-if="n.personCertStage==0"> | ||
| 46 | 新会员 | ||
| 47 | </text> | ||
| 48 | <text class="text-primary" v-if="n.personCertStage==1"> | ||
| 49 | 待提交 | ||
| 50 | </text> | ||
| 51 | <text class="text-warning" v-if="n.personCertStage==2"> | ||
| 52 | 缴费中 | ||
| 53 | </text> | ||
| 54 | <text class="text-success" v-if="n.personCertStage==3"> | ||
| 55 | 正常 | ||
| 56 | </text> | ||
| 57 | <text class="text-danger" v-if="n.personCertStage==4"> | ||
| 58 | 过期 | ||
| 59 | </text> | ||
| 60 | </view> | ||
| 61 | </view> | ||
| 62 | |||
| 63 | </uni-collapse-item> | ||
| 64 | </uni-collapse> | ||
| 65 | |||
| 66 | </view> | ||
| 67 | </template> | ||
| 68 | |||
| 69 | <script setup> | ||
| 70 | import { | ||
| 71 | ref | ||
| 72 | } from 'vue' | ||
| 73 | import { | ||
| 74 | onLoad | ||
| 75 | } from '@dcloudio/uni-app' | ||
| 76 | import * as api from '@/common/api.js' | ||
| 77 | import config from '@/config.js' | ||
| 78 | const queryParams = ref({}) | ||
| 79 | const total = ref(0) | ||
| 80 | const list = ref([]) | ||
| 81 | const popup = ref(null) | ||
| 82 | const type = ref('') | ||
| 83 | const form = ref({}) | ||
| 84 | const cardType = ref([{ | ||
| 85 | label: '身份证', | ||
| 86 | value: '0' | ||
| 87 | }, | ||
| 88 | { | ||
| 89 | label: '港澳台通行证 ', | ||
| 90 | value: '1' | ||
| 91 | }, | ||
| 92 | { | ||
| 93 | label: '中国护照', | ||
| 94 | value: '2' | ||
| 95 | }, | ||
| 96 | { | ||
| 97 | label: '外国护照', | ||
| 98 | value: '3' | ||
| 99 | }, | ||
| 100 | { | ||
| 101 | label: '其它', | ||
| 102 | value: '4' | ||
| 103 | }, | ||
| 104 | { | ||
| 105 | label: '户口本', | ||
| 106 | value: '5' | ||
| 107 | } | ||
| 108 | ]) | ||
| 109 | onLoad((option) => { | ||
| 110 | if (option.rangeId) { | ||
| 111 | queryParams.value.rangeId = option.rangeId | ||
| 112 | getList() | ||
| 113 | } | ||
| 114 | }) | ||
| 115 | |||
| 116 | function getList() { | ||
| 117 | uni.showLoading({ | ||
| 118 | title: '加载中' | ||
| 119 | }) | ||
| 120 | api.addInfoModeList(queryParams.value).then(res => { | ||
| 121 | list.value = res.rows | ||
| 122 | list.value.forEach(item => { | ||
| 123 | item.fileUrl = JSON.parse(item.fileUrl) | ||
| 124 | }) | ||
| 125 | total.value = res.total | ||
| 126 | uni.hideLoading() | ||
| 127 | }) | ||
| 128 | } | ||
| 129 | |||
| 130 | function handleChange(a, b) { | ||
| 131 | type.value = b | ||
| 132 | form.value = a | ||
| 133 | console.log(form.value.newName) | ||
| 134 | popup.value.open() | ||
| 135 | } | ||
| 136 | |||
| 137 | function handleDelete(row) { | ||
| 138 | uni.showModal({ | ||
| 139 | content: `确认删除会员${row.newName}`, | ||
| 140 | success: function(res) { | ||
| 141 | if (res.confirm) { | ||
| 142 | api.infoMod([row.id]).then(res => { | ||
| 143 | uni.showToast({ | ||
| 144 | title: '操作成功' | ||
| 145 | }) | ||
| 146 | getList() | ||
| 147 | }) | ||
| 148 | } | ||
| 149 | } | ||
| 150 | }) | ||
| 151 | } | ||
| 152 | |||
| 153 | function showImg(n) { | ||
| 154 | var str = config.baseUrl_api + n.fileUrl[0]?.url | ||
| 155 | if (n.fileUrl[0]?.url.indexOf('png') > -1 || n.fileUrl[0]?.url.indexOf('jpg') > -1 || n.fileUrl[0]?.url.indexOf( | ||
| 156 | 'jpeg') > -1) { | ||
| 157 | uni.previewImage({ | ||
| 158 | urls: [str], | ||
| 159 | success: function(res) { | ||
| 160 | console.log('success', res) | ||
| 161 | }, | ||
| 162 | fail: function(res) { | ||
| 163 | console.log('fail', res) | ||
| 164 | }, | ||
| 165 | complete: function(res) { | ||
| 166 | console.log('complete', res) | ||
| 167 | } | ||
| 168 | }) | ||
| 169 | } else { | ||
| 170 | goWebView(str) | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | function goWebView(url) { | ||
| 175 | url = url.replace("http://", "https://") | ||
| 176 | uni.showLoading({ | ||
| 177 | title: '下载中' | ||
| 178 | }); | ||
| 179 | uni.downloadFile({ | ||
| 180 | url: url, | ||
| 181 | success: function(res) { | ||
| 182 | uni.hideLoading(); | ||
| 183 | var filePath = res.tempFilePath; | ||
| 184 | uni.showLoading({ | ||
| 185 | title: '正在打开' | ||
| 186 | }); | ||
| 187 | uni.openDocument({ | ||
| 188 | filePath: filePath, | ||
| 189 | showMenu: true, | ||
| 190 | success: function(res) { | ||
| 191 | uni.hideLoading(); | ||
| 192 | }, | ||
| 193 | fail: function(err) { | ||
| 194 | uni.hideLoading(); | ||
| 195 | uni.showToast({ | ||
| 196 | title: err, | ||
| 197 | icon: 'none', | ||
| 198 | duration: 2000 | ||
| 199 | }); | ||
| 200 | } | ||
| 201 | }); | ||
| 202 | }, | ||
| 203 | fail: function(error) { | ||
| 204 | uni.hideLoading(); | ||
| 205 | uni.showToast({ | ||
| 206 | title: `下载失败`, | ||
| 207 | icon: 'none', | ||
| 208 | duration: 2000 | ||
| 209 | }); | ||
| 210 | } | ||
| 211 | }); | ||
| 212 | } | ||
| 213 | </script> | ||
| 214 | <style scoped lang="scss"> | ||
| 215 | .flexbox { | ||
| 216 | padding: 30rpx 30rpx 0 | ||
| 217 | } | ||
| 218 | |||
| 219 | .danger-button { | ||
| 220 | display: flex; | ||
| 221 | flex-direction: column; | ||
| 222 | align-items: center; | ||
| 223 | justify-content: center; | ||
| 224 | } | ||
| 225 | |||
| 226 | .collapseBody { | ||
| 227 | padding: 0 30rpx; | ||
| 228 | box-sizing: border-box; | ||
| 229 | font-size: 28rpx; | ||
| 230 | |||
| 231 | view { | ||
| 232 | margin: 0 0 20rpx; | ||
| 233 | |||
| 234 | label { | ||
| 235 | width: 5em; | ||
| 236 | color: #999; | ||
| 237 | display: inline-block; | ||
| 238 | text-align: right; | ||
| 239 | } | ||
| 240 | } | ||
| 241 | } | ||
| 242 | |||
| 243 | .popBody { | ||
| 244 | background: #fff; | ||
| 245 | padding: 30rpx; | ||
| 246 | } | ||
| 247 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -3,7 +3,7 @@ | ... | @@ -3,7 +3,7 @@ |
| 3 | <!-- 查看缴费单+上传凭证 --> | 3 | <!-- 查看缴费单+上传凭证 --> |
| 4 | <!-- 缴费审核 --> | 4 | <!-- 缴费审核 --> |
| 5 | <view class="appList"> | 5 | <view class="appList"> |
| 6 | <view class="appItem" v-for="item in list"> | 6 | <view class="appItem" v-for="(item,index) in list" :key="index"> |
| 7 | <view class="status" @click="goDetail(item)"> | 7 | <view class="status" @click="goDetail(item)"> |
| 8 | <text v-if="item.record.auditStatus==0" class="text-primary">审核中</text> | 8 | <text v-if="item.record.auditStatus==0" class="text-primary">审核中</text> |
| 9 | <text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text> | 9 | <text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text> | ... | ... |
| ... | @@ -45,7 +45,10 @@ | ... | @@ -45,7 +45,10 @@ |
| 45 | </view> | 45 | </view> |
| 46 | </view> | 46 | </view> |
| 47 | </view> | 47 | </view> |
| 48 | 48 | <view class="nodata" v-if="list.length==0"> | |
| 49 | <image mode="aspectFit" src="/static/nodata.png"></image> | ||
| 50 | <text>暂无数据</text> | ||
| 51 | </view> | ||
| 49 | </view> | 52 | </view> |
| 50 | </template> | 53 | </template> |
| 51 | 54 | ||
| ... | @@ -68,7 +71,6 @@ | ... | @@ -68,7 +71,6 @@ |
| 68 | const total = ref(0) | 71 | const total = ref(0) |
| 69 | const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝']) | 72 | const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝']) |
| 70 | onShow(() => { | 73 | onShow(() => { |
| 71 | console.log('123') | ||
| 72 | getList() | 74 | getList() |
| 73 | }) | 75 | }) |
| 74 | 76 | ... | ... |
static/btn06.png
deleted
100644 → 0
30.4 KB
static/btn07.png
deleted
100644 → 0
30 KB
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="box1"> | ||
| 4 | <view class="title"> | ||
| 5 | <view class="title-left">{{ porps.title }}</view> | ||
| 6 | <view class="title-icon" @click="changFN"> | ||
| 7 | <uni-icons type="top" color="#95a1a6" v-if="show"></uni-icons> | ||
| 8 | <uni-icons type="bottom" color="#95a1a6" v-else></uni-icons> | ||
| 9 | </view> | ||
| 10 | </view> | ||
| 11 | <view class="conter-liner-cost"> | ||
| 12 | <view class="liner-left">{{ porps.text }} 合计:</view> | ||
| 13 | <view class="liner-right">{{ porps.cost }}元</view> | ||
| 14 | </view> | ||
| 15 | </view> | ||
| 16 | <view class="box2" v-show="show"><slot></slot></view> | ||
| 17 | </view> | ||
| 18 | </template> | ||
| 19 | |||
| 20 | <script setup> | ||
| 21 | import { ref } from 'vue'; | ||
| 22 | const porps = defineProps({ | ||
| 23 | title: String, | ||
| 24 | text: String, | ||
| 25 | cost: String | ||
| 26 | }); | ||
| 27 | const show = ref(false); | ||
| 28 | |||
| 29 | function changFN() { | ||
| 30 | show.value = !show.value; | ||
| 31 | } | ||
| 32 | </script> | ||
| 33 | |||
| 34 | <style lang="scss" scoped> | ||
| 35 | .box { | ||
| 36 | margin: 0; | ||
| 37 | padding: 0 25rpx; | ||
| 38 | .box1 { | ||
| 39 | margin-bottom: 23rpx; | ||
| 40 | margin-top: 35rpx; | ||
| 41 | .title { | ||
| 42 | display: flex; | ||
| 43 | justify-content: space-between; | ||
| 44 | margin-bottom: 10rpx; | ||
| 45 | |||
| 46 | .title-left { | ||
| 47 | font-size: 30rpx; | ||
| 48 | font-family: PingFang SC; | ||
| 49 | font-weight: 500; | ||
| 50 | color: #2b3133; | ||
| 51 | } | ||
| 52 | } | ||
| 53 | .conter-liner-cost { | ||
| 54 | display: flex; | ||
| 55 | .liner-left { | ||
| 56 | font-size: 28rpx; | ||
| 57 | font-family: PingFang SC; | ||
| 58 | font-weight: 400; | ||
| 59 | color: #7b7f83; | ||
| 60 | } | ||
| 61 | .liner-right { | ||
| 62 | font-size: 28rpx; | ||
| 63 | font-family: PingFang SC; | ||
| 64 | font-weight: 400; | ||
| 65 | color: #ff8124; | ||
| 66 | } | ||
| 67 | } | ||
| 68 | } | ||
| 69 | .box2 { | ||
| 70 | border-top: 1rpx solid #e6e6e6; | ||
| 71 | } | ||
| 72 | } | ||
| 73 | </style> |
This diff is collapsed.
Click to expand it.
| 1 | <template> | ||
| 2 | <view class=" conter-box"> | ||
| 3 | <view class="box" v-if="props.trainProjectsList.length != 0"> | ||
| 4 | <view class="text">培训科目</view> | ||
| 5 | <view class="box2"> | ||
| 6 | <checkbox-group> | ||
| 7 | <view class="box-check" v-for="item in props.trainProjectsList" :key="item.id"> | ||
| 8 | <view class=""> | ||
| 9 | <view class="title">{{ item.projectName }}</view> | ||
| 10 | <view class="content"> | ||
| 11 | {{ item.isNecessary == 1 ? '必选' : '非必选' }} 合计: | ||
| 12 | <view class="span">{{ item.cost }}元</view> | ||
| 13 | </view> | ||
| 14 | </view> | ||
| 15 | <view class="checkbox"> | ||
| 16 | <checkbox | ||
| 17 | :disabled="item.isNecessary == 1" | ||
| 18 | :value="item.id" | ||
| 19 | @click="checkTrain(item)" | ||
| 20 | :checked="item.check" | ||
| 21 | /> | ||
| 22 | </view> | ||
| 23 | </view> | ||
| 24 | </checkbox-group> | ||
| 25 | </view> | ||
| 26 | </view> | ||
| 27 | <view class="box" v-if="props.examProjectsList.length != 0"> | ||
| 28 | <view class="text">考试科目</view> | ||
| 29 | <view class="box2"> | ||
| 30 | <checkbox-group> | ||
| 31 | <view class="box-check" v-for="item in props.examProjectsList" :key="item.id"> | ||
| 32 | <view class=""> | ||
| 33 | <view class="title">{{ item.projectName }}</view> | ||
| 34 | <view class="content"> | ||
| 35 | {{ item.isNecessary == 1 ? '必选' : '非必选' }} 合计: | ||
| 36 | <view class="span">{{ item.cost }}元</view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="checkbox"> | ||
| 40 | <checkbox | ||
| 41 | :disabled="item.isNecessary == 1" | ||
| 42 | :value="item.id" | ||
| 43 | @click="checkTrain(item)" | ||
| 44 | :checked="item.check" | ||
| 45 | /> | ||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | </checkbox-group> | ||
| 49 | </view> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | <view class="foot"> | ||
| 53 | <view class="button1" @click="upFN">上一步</view> | ||
| 54 | <view class="button" @click="nextFN">下一步</view> | ||
| 55 | </view> | ||
| 56 | <view class="nodata " v-if="props.examProjectsList.length == 0 && props.trainProjectsList.length == 0"> | ||
| 57 | 没有培训科目 | ||
| 58 | </view> | ||
| 59 | </template> | ||
| 60 | |||
| 61 | <script setup> | ||
| 62 | import { forEach } from 'lodash'; | ||
| 63 | import { ref, getCurrentInstance, reactive, toRefs } from 'vue'; | ||
| 64 | const props = defineProps({ | ||
| 65 | trainProjectsList: {}, | ||
| 66 | examProjectsList: {}, | ||
| 67 | hotelList: {}, | ||
| 68 | id: {} | ||
| 69 | }); | ||
| 70 | const data = reactive({ | ||
| 71 | projectIdsArray: [] | ||
| 72 | }); | ||
| 73 | |||
| 74 | const examIdsArry = ref([]); | ||
| 75 | const { projectIdsArray } = toRefs(data); | ||
| 76 | const emit = defineEmits(['nextFN']); | ||
| 77 | const checkbox1 = ref([0]); | ||
| 78 | |||
| 79 | function checkTrain(item) { | ||
| 80 | if (item.isNecessary == 1) { | ||
| 81 | item.check = true; | ||
| 82 | } else { | ||
| 83 | item.check = !item.check; | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | // 上一步 | ||
| 88 | function upFN() { | ||
| 89 | emit('nextFN', 0); | ||
| 90 | } | ||
| 91 | |||
| 92 | // 下一步 | ||
| 93 | function nextFN() { | ||
| 94 | let falg = true; | ||
| 95 | let arr1 = []; | ||
| 96 | let arr2 = []; | ||
| 97 | props.examProjectsList.forEach(item => { | ||
| 98 | if (item.check) { | ||
| 99 | arr1.push(item.id); | ||
| 100 | } | ||
| 101 | }); | ||
| 102 | props.trainProjectsList.forEach(item => { | ||
| 103 | if (item.check) { | ||
| 104 | arr2.push(item.id); | ||
| 105 | } | ||
| 106 | }); | ||
| 107 | let examList = JSON.parse(JSON.stringify(props.examProjectsList)); | ||
| 108 | let trainList = JSON.parse(JSON.stringify(props.trainProjectsList)); | ||
| 109 | examList.concat(trainList).forEach(item => { | ||
| 110 | if (item.isNecessary == 1 && item.check == false) { | ||
| 111 | falg = false; | ||
| 112 | } | ||
| 113 | }); | ||
| 114 | |||
| 115 | if (falg) { | ||
| 116 | examIdsArry.value = arr1; | ||
| 117 | projectIdsArray.value = arr2; | ||
| 118 | if (props.hotelList.length == 0) { | ||
| 119 | // 没有酒店直接报名 | ||
| 120 | // 页面跳转 | ||
| 121 | let path = `/pages/train/costBreakdown/costBreakdown?id=` + props.id; | ||
| 122 | wx.navigateTo({ | ||
| 123 | url: path | ||
| 124 | }); | ||
| 125 | } else { | ||
| 126 | emit('nextFN', 2, projectIdsArray.value, examIdsArry.value); | ||
| 127 | } | ||
| 128 | } else { | ||
| 129 | uni.showToast({ | ||
| 130 | title: '请选择必选科目!', | ||
| 131 | duration: 2000, | ||
| 132 | icon: 'error' | ||
| 133 | }); | ||
| 134 | return false; | ||
| 135 | } | ||
| 136 | } | ||
| 137 | </script> | ||
| 138 | |||
| 139 | <style scoped lang="scss"> | ||
| 140 | .nodata { | ||
| 141 | background: url(/static/nodata.png) no-repeat; | ||
| 142 | background-size: 100%; | ||
| 143 | width: 100%; | ||
| 144 | height: 835rpx; | ||
| 145 | color: #aaa59f; | ||
| 146 | font-size: 50rpx; | ||
| 147 | } | ||
| 148 | |||
| 149 | .conter-box { | ||
| 150 | padding-bottom: 100rpx; | ||
| 151 | } | ||
| 152 | |||
| 153 | .box { | ||
| 154 | padding: 34rpx 25rpx; | ||
| 155 | background-color: #f4f6fa; | ||
| 156 | padding-bottom: 0; | ||
| 157 | |||
| 158 | .box2 { | ||
| 159 | background-color: #fff; | ||
| 160 | border-radius: 15rpx; | ||
| 161 | margin-top: 20rpx; | ||
| 162 | } | ||
| 163 | |||
| 164 | .text { | ||
| 165 | height: 29px; | ||
| 166 | font-size: 30rpx; | ||
| 167 | font-family: PingFang SC; | ||
| 168 | font-weight: 500; | ||
| 169 | color: #000000; | ||
| 170 | line-height: 62rpx; | ||
| 171 | } | ||
| 172 | |||
| 173 | .box-check { | ||
| 174 | padding: 40rpx; | ||
| 175 | display: flex; | ||
| 176 | justify-content: space-between; | ||
| 177 | border-bottom: 1rpx solid #e6e6e6; | ||
| 178 | padding-bottom: 20rpx; | ||
| 179 | |||
| 180 | :deep(.checkbox__inner) { | ||
| 181 | background-color: #d9d9d9 !important; | ||
| 182 | border-color: #d9d9d9 !important; | ||
| 183 | border-radius: 50% !important; | ||
| 184 | width: 45rpx !important; | ||
| 185 | height: 45rpx !important; | ||
| 186 | line-height: 40rpx; | ||
| 187 | } | ||
| 188 | |||
| 189 | .text { | ||
| 190 | font-size: 12px; | ||
| 191 | color: #666; | ||
| 192 | margin-top: 5px; | ||
| 193 | } | ||
| 194 | |||
| 195 | .title { | ||
| 196 | font-size: 30rpx; | ||
| 197 | font-family: PingFang SC; | ||
| 198 | font-weight: 400; | ||
| 199 | color: #2b3133; | ||
| 200 | margin-bottom: 10rpx; | ||
| 201 | } | ||
| 202 | |||
| 203 | .content { | ||
| 204 | display: flex; | ||
| 205 | font-size: 30rpx; | ||
| 206 | font-family: PingFang SC; | ||
| 207 | font-weight: 400; | ||
| 208 | color: #2b3133; | ||
| 209 | |||
| 210 | .span { | ||
| 211 | color: #ff8124; | ||
| 212 | font-size: 28rpx; | ||
| 213 | font-family: PingFang SC; | ||
| 214 | font-weight: 400; | ||
| 215 | } | ||
| 216 | } | ||
| 217 | } | ||
| 218 | |||
| 219 | :deep(.checkbox__inner-icon) { | ||
| 220 | position: absolute !important; | ||
| 221 | top: 4px !important; | ||
| 222 | left: 7px !important; | ||
| 223 | color: #000 !important; | ||
| 224 | } | ||
| 225 | |||
| 226 | :deep(.uni-data-checklist .checklist-group .checklist-box) { | ||
| 227 | margin-right: 0; | ||
| 228 | } | ||
| 229 | } | ||
| 230 | |||
| 231 | .conter-button { | ||
| 232 | position: absolute; | ||
| 233 | left: 0; | ||
| 234 | bottom: 10rpx; | ||
| 235 | width: 100%; | ||
| 236 | display: flex; | ||
| 237 | justify-content: center; | ||
| 238 | |||
| 239 | .button { | ||
| 240 | height: 80rpx; | ||
| 241 | width: 500rpx; | ||
| 242 | text-align: center; | ||
| 243 | font-size: 32rpx; | ||
| 244 | font-family: PingFang SC; | ||
| 245 | font-weight: 500; | ||
| 246 | color: #ffffff; | ||
| 247 | line-height: 80rpx; | ||
| 248 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 249 | border-radius: 40rpx; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | |||
| 253 | .foot { | ||
| 254 | display: flex; | ||
| 255 | background-color: #ffffff; | ||
| 256 | padding: 20rpx 0; | ||
| 257 | position: absolute; | ||
| 258 | left: 0; | ||
| 259 | bottom: 0; | ||
| 260 | width: 100%; | ||
| 261 | |||
| 262 | .button { | ||
| 263 | margin: 0 auto; | ||
| 264 | height: 80rpx; | ||
| 265 | width: 300rpx; | ||
| 266 | text-align: center; | ||
| 267 | font-size: 32rpx; | ||
| 268 | font-family: PingFang SC; | ||
| 269 | font-weight: 500; | ||
| 270 | color: #ffffff; | ||
| 271 | line-height: 80rpx; | ||
| 272 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 273 | border-radius: 40rpx; | ||
| 274 | } | ||
| 275 | |||
| 276 | .button1 { | ||
| 277 | margin: 0 auto; | ||
| 278 | height: 80rpx; | ||
| 279 | width: 300rpx; | ||
| 280 | text-align: center; | ||
| 281 | font-size: 32rpx; | ||
| 282 | font-family: PingFang SC; | ||
| 283 | font-weight: 500; | ||
| 284 | line-height: 80rpx; | ||
| 285 | background: #fff; | ||
| 286 | border-radius: 40rpx; | ||
| 287 | border: 1px solid #2ed981; | ||
| 288 | color: #2ed981; | ||
| 289 | } | ||
| 290 | } | ||
| 291 | </style> |
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="liner" v-for="item in props.scheduleList" :key="item.id"> | ||
| 4 | <view class="timer"> | ||
| 5 | <uni-icons custom-prefix="iconfont" type="icon-ai253" color="#1ec886" size="20"></uni-icons> | ||
| 6 | {{ item.dayStr }} 10:00-12:00 | ||
| 7 | </view> | ||
| 8 | <view class="conetr">{{ item.event }}</view> | ||
| 9 | <view class="data"> | ||
| 10 | <uni-icons custom-prefix="iconfont" type="icon-loufangfangzi"></uni-icons> | ||
| 11 | {{ item.place }} | ||
| 12 | </view> | ||
| 13 | </view> | ||
| 14 | <view class="nodata" v-if="props?.scheduleList?.length == 0">你还没有日程安排</view> | ||
| 15 | </view> | ||
| 16 | </template> | ||
| 17 | |||
| 18 | <script setup> | ||
| 19 | import { ref, getCurrentInstance, reactive, toRefs } from 'vue'; | ||
| 20 | const props = defineProps({ | ||
| 21 | scheduleList: {} | ||
| 22 | }); | ||
| 23 | </script> | ||
| 24 | |||
| 25 | <style scoped lang="scss"> | ||
| 26 | .nodata { | ||
| 27 | background: url(/static/nodata.png) no-repeat; | ||
| 28 | background-size: 100%; | ||
| 29 | width: 100%; | ||
| 30 | height: 835rpx; | ||
| 31 | color: #aaa59f; | ||
| 32 | font-size: 50rpx; | ||
| 33 | } | ||
| 34 | |||
| 35 | .box { | ||
| 36 | padding-top: 25rpx; | ||
| 37 | |||
| 38 | .liner { | ||
| 39 | margin-bottom: 20rpx; | ||
| 40 | background-color: #fff; | ||
| 41 | border-radius: 15rpx; | ||
| 42 | padding: 20rpx; | ||
| 43 | } | ||
| 44 | |||
| 45 | .timer { | ||
| 46 | display: flex; | ||
| 47 | font-size: 28rpx; | ||
| 48 | font-family: PingFang SC; | ||
| 49 | font-weight: 400; | ||
| 50 | color: #1ec886; | ||
| 51 | } | ||
| 52 | |||
| 53 | .conetr { | ||
| 54 | font-size: 30rpx; | ||
| 55 | font-family: PingFang SC; | ||
| 56 | font-weight: 400; | ||
| 57 | color: #2b3133; | ||
| 58 | margin: 25rpx 0; | ||
| 59 | } | ||
| 60 | |||
| 61 | .data { | ||
| 62 | font-size: 28rpx; | ||
| 63 | font-family: PingFang SC; | ||
| 64 | font-weight: 400; | ||
| 65 | color: #7b7f83; | ||
| 66 | } | ||
| 67 | } | ||
| 68 | </style> |
training/components/ulist/ulist.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="big-box"> | ||
| 3 | <view class="list-box"> | ||
| 4 | <view class="image"> | ||
| 5 | <image class="img" referrer="no-referrer|origin|unsafe-url" :src="porps.pic" mode="aspectFill"></image> | ||
| 6 | </view> | ||
| 7 | <view class="text"> | ||
| 8 | <view class="text-title">{{ porps.title }}</view> | ||
| 9 | <view class="text-card color" v-if="porps.card == '报名中'">{{ porps.card }}</view> | ||
| 10 | <view class="text-card color1" v-if="porps.card == '进行中'">{{ porps.card }}</view> | ||
| 11 | <view class="text-card color2" v-if="porps.card == '即将开始'">{{ porps.card }}</view> | ||
| 12 | <view class="text-card color3" v-if="porps.card == '已结束'">{{ porps.card }}</view> | ||
| 13 | <view class="text-card color4" v-if="porps.card == '培训未开始'">{{ porps.card }}</view> | ||
| 14 | <view class="text-card color4" v-if="porps.card == '报名未开始'">{{ porps.card }}</view> | ||
| 15 | <view class="text-timer ">报名时间:{{ porps.timer }}</view> | ||
| 16 | </view> | ||
| 17 | </view> | ||
| 18 | <view class="hr"></view> | ||
| 19 | </view> | ||
| 20 | </template> | ||
| 21 | |||
| 22 | <script setup> | ||
| 23 | const porps = defineProps({ | ||
| 24 | pic: { | ||
| 25 | type: String | ||
| 26 | }, | ||
| 27 | title: { | ||
| 28 | type: String | ||
| 29 | }, | ||
| 30 | card: { | ||
| 31 | type: String | ||
| 32 | }, | ||
| 33 | timer: { | ||
| 34 | type: String | ||
| 35 | } | ||
| 36 | }); | ||
| 37 | </script> | ||
| 38 | |||
| 39 | <style lang="scss"> | ||
| 40 | .big-box { | ||
| 41 | width: 100%; | ||
| 42 | padding: 25rpx 0; | ||
| 43 | |||
| 44 | .hr { | ||
| 45 | width: 100%; | ||
| 46 | border-bottom: 1rpx solid #e5e5e5; | ||
| 47 | padding-top: 25rpx; | ||
| 48 | } | ||
| 49 | |||
| 50 | .list-box { | ||
| 51 | width: 100%; | ||
| 52 | height: 180rpx; | ||
| 53 | display: flex; | ||
| 54 | |||
| 55 | .image { | ||
| 56 | width: 270rpx; | ||
| 57 | height: 180rpx; | ||
| 58 | padding-right: 25rpx; | ||
| 59 | |||
| 60 | .img { | ||
| 61 | width: 270rpx; | ||
| 62 | height: 180rpx; | ||
| 63 | border-radius: 15rpx; | ||
| 64 | } | ||
| 65 | } | ||
| 66 | |||
| 67 | .text { | ||
| 68 | margin-left: 20rpx; | ||
| 69 | |||
| 70 | .text-title { | ||
| 71 | text-align: left; | ||
| 72 | font-size: 30rpx; | ||
| 73 | font-family: PingFang SC; | ||
| 74 | font-weight: 400; | ||
| 75 | color: #000000; | ||
| 76 | } | ||
| 77 | |||
| 78 | .text-card { | ||
| 79 | font-size: 20rpx; | ||
| 80 | width: 110rpx; | ||
| 81 | height: 32rpx; | ||
| 82 | margin-top: 57rpx; | ||
| 83 | text-align: center; | ||
| 84 | font-family: PingFang SC; | ||
| 85 | font-weight: 400; | ||
| 86 | color: #ffffff; | ||
| 87 | border-radius: 16px 16px 16px 0px; | ||
| 88 | } | ||
| 89 | |||
| 90 | .color { | ||
| 91 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 92 | } | ||
| 93 | |||
| 94 | .color1 { | ||
| 95 | background: linear-gradient(270deg, #be8efb, #a76df4); | ||
| 96 | } | ||
| 97 | |||
| 98 | .color2 { | ||
| 99 | background: linear-gradient(270deg, #fea449, #ffb95f); | ||
| 100 | } | ||
| 101 | |||
| 102 | .color3 { | ||
| 103 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 104 | } | ||
| 105 | |||
| 106 | .color4 { | ||
| 107 | background: linear-gradient(270deg, #40d8ee, #53a7f6); | ||
| 108 | } | ||
| 109 | |||
| 110 | .text-timer { | ||
| 111 | margin-top: 20rpx; | ||
| 112 | height: 23rpx; | ||
| 113 | font-size: 24rpx; | ||
| 114 | font-family: PingFang SC; | ||
| 115 | font-weight: 400; | ||
| 116 | color: #7b7f83; | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||
| 120 | } | ||
| 121 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
training/components/ulist/ulist1.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="big-box"> | ||
| 3 | <view class="list-box"> | ||
| 4 | <view class="image"> | ||
| 5 | <image | ||
| 6 | class="img" | ||
| 7 | referrer="no-referrer|origin|unsafe-url" | ||
| 8 | :src="porps.item.cover" | ||
| 9 | mode="aspectFill" | ||
| 10 | ></image> | ||
| 11 | </view> | ||
| 12 | <view class="text"> | ||
| 13 | <view class="text-title">{{ porps.item.trainName }}</view> | ||
| 14 | <view class="text-card color1" v-if="porps.item.statusStr == '审核通过'"> | ||
| 15 | {{ porps.item.statusStr }} | ||
| 16 | </view> | ||
| 17 | <view class="text-card color2" v-if="porps.item.statusStr == '待审核'"> | ||
| 18 | {{ | ||
| 19 | porps.item.status == '0' && porps.item.payStatus == '0' | ||
| 20 | ? porps.item.payStatusStr | ||
| 21 | : porps.item.statusStr | ||
| 22 | }} | ||
| 23 | </view> | ||
| 24 | <view class="text-card color3" v-if="porps.item.statusStr == '报名失败'"> | ||
| 25 | {{ porps.item.statusStr }} | ||
| 26 | </view> | ||
| 27 | <view class="text-card color3" v-if="porps.item.statusStr == '审核拒绝'"> | ||
| 28 | {{ porps.item.statusStr }} | ||
| 29 | </view> | ||
| 30 | <view class="text-card color4" v-if="porps.item.statusStr == '待支付'">{{ porps.item.statusStr }}</view> | ||
| 31 | <view class="text-card color4" v-if="porps.item.statusStr == '待提交'">{{ porps.item.statusStr }}</view> | ||
| 32 | <view class="text-card color5" v-if="porps.item.statusStr == '已取消'">{{ porps.item.statusStr }}</view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | <view class="hr"></view> | ||
| 36 | </view> | ||
| 37 | </template> | ||
| 38 | |||
| 39 | <script setup> | ||
| 40 | const porps = defineProps({ | ||
| 41 | pic: { | ||
| 42 | type: String | ||
| 43 | }, | ||
| 44 | title: { | ||
| 45 | type: String | ||
| 46 | }, | ||
| 47 | card: { | ||
| 48 | type: String | ||
| 49 | }, | ||
| 50 | timer: { | ||
| 51 | type: String | ||
| 52 | }, | ||
| 53 | item: {} | ||
| 54 | }); | ||
| 55 | </script> | ||
| 56 | |||
| 57 | <style lang="scss"> | ||
| 58 | .big-box { | ||
| 59 | width: 100%; | ||
| 60 | padding: 25rpx 0; | ||
| 61 | |||
| 62 | .hr { | ||
| 63 | width: 100%; | ||
| 64 | border-bottom: 1rpx solid #e5e5e5; | ||
| 65 | padding-top: 25rpx; | ||
| 66 | } | ||
| 67 | |||
| 68 | .list-box { | ||
| 69 | width: 100%; | ||
| 70 | height: 180rpx; | ||
| 71 | display: flex; | ||
| 72 | |||
| 73 | .image { | ||
| 74 | width: 270rpx; | ||
| 75 | height: 180rpx; | ||
| 76 | padding-right: 25rpx; | ||
| 77 | |||
| 78 | .img { | ||
| 79 | width: 270rpx; | ||
| 80 | height: 180rpx; | ||
| 81 | border-radius: 15rpx; | ||
| 82 | } | ||
| 83 | } | ||
| 84 | |||
| 85 | .text { | ||
| 86 | margin-left: 20rpx; | ||
| 87 | |||
| 88 | .text-title { | ||
| 89 | text-align: left; | ||
| 90 | font-size: 30rpx; | ||
| 91 | font-family: PingFang SC; | ||
| 92 | font-weight: 400; | ||
| 93 | color: #000000; | ||
| 94 | } | ||
| 95 | |||
| 96 | .text-card { | ||
| 97 | font-size: 20rpx; | ||
| 98 | width: 94rpx; | ||
| 99 | height: 32rpx; | ||
| 100 | margin-top: 57rpx; | ||
| 101 | text-align: center; | ||
| 102 | font-family: PingFang SC; | ||
| 103 | font-weight: 400; | ||
| 104 | color: #ffffff; | ||
| 105 | border-radius: 16px 16px 16px 0px; | ||
| 106 | } | ||
| 107 | |||
| 108 | .color1 { | ||
| 109 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 110 | } | ||
| 111 | |||
| 112 | .color2 { | ||
| 113 | background: linear-gradient(270deg, #be8efb, #a76df4); | ||
| 114 | } | ||
| 115 | |||
| 116 | .color3 { | ||
| 117 | background: linear-gradient(90deg, #f83841, #f76d74); | ||
| 118 | } | ||
| 119 | |||
| 120 | .color4 { | ||
| 121 | background: linear-gradient(90deg, #fea449, #ffb95f); | ||
| 122 | } | ||
| 123 | |||
| 124 | .color5 { | ||
| 125 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 126 | } | ||
| 127 | } | ||
| 128 | } | ||
| 129 | } | ||
| 130 | </style> |
training/detailPage.vue
0 → 100644
This diff is collapsed.
Click to expand it.
training/train.js
0 → 100644
| 1 | import request from '@/common/request.js' | ||
| 2 | const accountInfo = uni.getAccountInfoSync() | ||
| 3 | const appId = accountInfo.miniProgram.appId; | ||
| 4 | |||
| 5 | // 获取培训列表 | ||
| 6 | export function getTrainList(params) { | ||
| 7 | return request({ | ||
| 8 | url: `/webPc/getTrains`, | ||
| 9 | method: 'get', | ||
| 10 | params: params | ||
| 11 | }) | ||
| 12 | } | ||
| 13 | |||
| 14 | // 查看培训项目 | ||
| 15 | export function getTrainDetail(id) { | ||
| 16 | return request({ | ||
| 17 | url: '/webPc/getTrainDetails', | ||
| 18 | method: 'get', | ||
| 19 | params: {id} | ||
| 20 | }) | ||
| 21 | } | ||
| 22 | |||
| 23 | // 查看培训项目 | ||
| 24 | export function trainProjectList(params) { | ||
| 25 | return request({ | ||
| 26 | url: '/systemj/information/projectList', | ||
| 27 | method: 'get', | ||
| 28 | params: params | ||
| 29 | }) | ||
| 30 | } | ||
| 31 | |||
| 32 | // 查看报名费用(未支付前) | ||
| 33 | export function searchTrainCost(params) { | ||
| 34 | return request({ | ||
| 35 | url: '/systemj/signer/getEnrollBill', | ||
| 36 | method: 'get', | ||
| 37 | params: params | ||
| 38 | }) | ||
| 39 | } | ||
| 40 | |||
| 41 | // 提交 用户资料 | ||
| 42 | export function trainNext(params) { | ||
| 43 | return request({ | ||
| 44 | url: `/systemj/signer/signUp`, | ||
| 45 | method: 'post', | ||
| 46 | params, | ||
| 47 | }) | ||
| 48 | } | ||
| 49 | |||
| 50 | // 生成订单 | ||
| 51 | export function createOrder(params) { | ||
| 52 | return request({ | ||
| 53 | url: `/systemj/order/saveOrder`, | ||
| 54 | method: 'post', | ||
| 55 | params, | ||
| 56 | }) | ||
| 57 | } | ||
| 58 | |||
| 59 | //会员支付 | ||
| 60 | export function pay(params) { | ||
| 61 | return request({ | ||
| 62 | url: `/systemj/order/pay`, | ||
| 63 | method: 'post', | ||
| 64 | params, | ||
| 65 | }) | ||
| 66 | } | ||
| 67 | |||
| 68 | // 线下支付银行信息 | ||
| 69 | export function bankSlip(params) { | ||
| 70 | return request({ | ||
| 71 | url: `/systemj/order/bankInfo`, | ||
| 72 | method: 'get', | ||
| 73 | params, | ||
| 74 | }) | ||
| 75 | } | ||
| 76 | |||
| 77 | export function trainOrder(params) { | ||
| 78 | return request({ | ||
| 79 | url: `/systemj/order/getMyOrders`, | ||
| 80 | method: 'get', | ||
| 81 | params, | ||
| 82 | }) | ||
| 83 | } | ||
| 84 | |||
| 85 | // 修改报名 | ||
| 86 | export function trainUpdata(params) { | ||
| 87 | return request({ | ||
| 88 | url: `/systemj/signer/updateSign`, | ||
| 89 | method: 'put', | ||
| 90 | params, | ||
| 91 | }) | ||
| 92 | } | ||
| 93 | |||
| 94 | // 取消订单 | ||
| 95 | export function cancelOrder(params) { | ||
| 96 | return request({ | ||
| 97 | url: `/systemj/order/cancelOrder`, | ||
| 98 | method: 'put', | ||
| 99 | params, | ||
| 100 | }) | ||
| 101 | } | ||
| 102 | |||
| 103 | // 报项列表 | ||
| 104 | export function signList(params) { | ||
| 105 | return request({ | ||
| 106 | url: `/systemj/signer/applets/signList`, | ||
| 107 | method: 'get', | ||
| 108 | params, | ||
| 109 | }) | ||
| 110 | } | ||
| 111 | |||
| 112 | // 报项详情 | ||
| 113 | export function signDetail(params) { | ||
| 114 | return request({ | ||
| 115 | url: `/systemj/signer/applets/signDetail`, | ||
| 116 | method: 'get', | ||
| 117 | params, | ||
| 118 | }) | ||
| 119 | } | ||
| 120 | |||
| 121 | // 订单列表 | ||
| 122 | export function orderList(params) { | ||
| 123 | return request({ | ||
| 124 | url: `/systemj/order/applets/orderList`, | ||
| 125 | method: 'get', | ||
| 126 | params, | ||
| 127 | }) | ||
| 128 | } | ||
| 129 | |||
| 130 | |||
| 131 | // 订单详情 | ||
| 132 | export function getOrderDetail(params) { | ||
| 133 | return request({ | ||
| 134 | url: `/systemj/order/getOrderDetail`, | ||
| 135 | method: 'get', | ||
| 136 | params, | ||
| 137 | }) | ||
| 138 | } | ||
| 139 | |||
| 140 |
training/trainList.vue
0 → 100644
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="title"> | ||
| 4 | <view class="navSerch"> | ||
| 5 | <view class="serch"> | ||
| 6 | <uni-search-bar class="uni-mt-10" radius="30" placeholder="搜索" clearButton="auto" Button="none" | ||
| 7 | cancelText="" v-model="name" bgColor="#F4F6FA" @confirm="search" @blur="blur" @clear="clear" /> | ||
| 8 | </view> | ||
| 9 | </view> | ||
| 10 | <view class="searchLeft"> | ||
| 11 | </view> | ||
| 12 | </view> | ||
| 13 | <view> | ||
| 14 | |||
| 15 | <view class="nav-box"> | ||
| 16 | <view class="nav-ul"> | ||
| 17 | <view class="nva-li" @click="nvaText(index)" :class="{nt:Nindex==index}" | ||
| 18 | v-for="(item,index) in items" :key="index"> | ||
| 19 | {{item}} | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | </view> | ||
| 23 | |||
| 24 | <view class="content"> | ||
| 25 | <view class="taber"> | ||
| 26 | <view v-for="item in list" :key="item.trainId" @click="detail(item)"> | ||
| 27 | <uniList :pic="config.baseUrl_api + item.cover" :title="item.name" :card="item.trainStatusStr" | ||
| 28 | :timer="filterTime(item.signTimeRange) "></uniList> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | </view> | ||
| 32 | <view><uni-load-more :status="status" :content-text="contentText" /></view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | </template> | ||
| 36 | |||
| 37 | <script setup> | ||
| 38 | import config from '@/config.js' | ||
| 39 | import uniList from '@/training/components/ulist/ulist'; | ||
| 40 | import * as train from '@/training/train.js'; | ||
| 41 | import { | ||
| 42 | onLoad, | ||
| 43 | onReady, | ||
| 44 | onShareAppMessage, | ||
| 45 | onShareTimeline, | ||
| 46 | onPullDownRefresh, | ||
| 47 | onReachBottom | ||
| 48 | } from '@dcloudio/uni-app'; | ||
| 49 | import { | ||
| 50 | ref, | ||
| 51 | getCurrentInstance, | ||
| 52 | reactive, | ||
| 53 | toRefs | ||
| 54 | } from 'vue'; | ||
| 55 | |||
| 56 | const searchValue = ref(); | ||
| 57 | const items = ref(['全部', '报名中', '培训进行中', '已结束']); | ||
| 58 | const current = ref(0); | ||
| 59 | const name = ref(); | ||
| 60 | const Nindex = ref(0) | ||
| 61 | const range = ref([{ | ||
| 62 | value: 1, | ||
| 63 | text: '全部' | ||
| 64 | }, | ||
| 65 | { | ||
| 66 | value: 2, | ||
| 67 | text: '报名中' | ||
| 68 | }, | ||
| 69 | { | ||
| 70 | value: 3, | ||
| 71 | text: '进行中' | ||
| 72 | }, | ||
| 73 | { | ||
| 74 | value: 4, | ||
| 75 | text: '即将开始' | ||
| 76 | }, | ||
| 77 | { | ||
| 78 | value: 5, | ||
| 79 | text: '报名未开始' | ||
| 80 | }, | ||
| 81 | { | ||
| 82 | value: 6, | ||
| 83 | text: '培训未开始' | ||
| 84 | }, | ||
| 85 | { | ||
| 86 | value: 7, | ||
| 87 | text: '已结束' | ||
| 88 | } | ||
| 89 | ]); | ||
| 90 | const list = ref(); | ||
| 91 | const total = ref(); | ||
| 92 | // noMore没有更多了 | ||
| 93 | // loading加载中 | ||
| 94 | // more下来加载 | ||
| 95 | const status = ref('more'); | ||
| 96 | const flag = ref(); | ||
| 97 | const data = reactive({ | ||
| 98 | query: { | ||
| 99 | flag: '', | ||
| 100 | pageSize: 10, | ||
| 101 | pageNum: 1 | ||
| 102 | }, | ||
| 103 | contentText: { | ||
| 104 | contentdown: '', | ||
| 105 | contentrefresh: '加载中', | ||
| 106 | contentnomore: '没有更多' | ||
| 107 | } | ||
| 108 | }); | ||
| 109 | const { | ||
| 110 | query, | ||
| 111 | contentText | ||
| 112 | } = toRefs(data); | ||
| 113 | |||
| 114 | // 加载培训列表数据 | ||
| 115 | onLoad(option => { | ||
| 116 | initData(); | ||
| 117 | |||
| 118 | }); | ||
| 119 | |||
| 120 | function initData() { | ||
| 121 | query.value.flag = current.value; | ||
| 122 | train.getTrainList(query.value).then(res=>{ | ||
| 123 | list.value = res.rows; | ||
| 124 | total.value = res.rows; | ||
| 125 | }) | ||
| 126 | } | ||
| 127 | |||
| 128 | // 详情页 | ||
| 129 | function detail(item) { | ||
| 130 | let path = `/training/detailPage?trainId=${item.id}`; | ||
| 131 | uni.navigateTo({ | ||
| 132 | url: path | ||
| 133 | }); | ||
| 134 | } | ||
| 135 | |||
| 136 | function nvaText(index) { | ||
| 137 | Nindex.value = index | ||
| 138 | current.value = index | ||
| 139 | initData() | ||
| 140 | console.log(index); | ||
| 141 | } | ||
| 142 | |||
| 143 | |||
| 144 | function filterTime(num) { | ||
| 145 | if (num) return num.slice(0, 16) | ||
| 146 | } | ||
| 147 | |||
| 148 | |||
| 149 | // 下拉框 | ||
| 150 | function change(e) { | ||
| 151 | if (e) { | ||
| 152 | addForm.value.flag = e - 1; | ||
| 153 | current.value = e - 1; | ||
| 154 | Nindex.value = e - 1 | ||
| 155 | console.log(e); | ||
| 156 | initData(); | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | // 搜索 | ||
| 161 | function search(res) { | ||
| 162 | if (res.value != '') { | ||
| 163 | addForm.value.trainName = res.value; | ||
| 164 | initData(); | ||
| 165 | } | ||
| 166 | |||
| 167 | } | ||
| 168 | |||
| 169 | // 搜索清空按钮 | ||
| 170 | function clear(res) { | ||
| 171 | addForm.value.trainName = ''; | ||
| 172 | initData(); | ||
| 173 | } | ||
| 174 | |||
| 175 | // 下来刷新 | ||
| 176 | onPullDownRefresh(() => { | ||
| 177 | addForm.value.flag = 0; | ||
| 178 | initData(); | ||
| 179 | wx.stopPullDownRefresh(); | ||
| 180 | }); | ||
| 181 | |||
| 182 | // 上拉加载 | ||
| 183 | onReachBottom(async () => { | ||
| 184 | if (list.value.length == total.value) { | ||
| 185 | status.value = 'noMore'; | ||
| 186 | return false; | ||
| 187 | } else { | ||
| 188 | status.value = 'loading'; | ||
| 189 | addForm.value.pageNum += 1; | ||
| 190 | let res = await train.getTrainList(addForm.value); | ||
| 191 | let arr = res.rows; | ||
| 192 | list.value = list.value.concat(arr); | ||
| 193 | total.value = res.total; | ||
| 194 | status.value = 'noMore'; | ||
| 195 | } | ||
| 196 | }); | ||
| 197 | </script> | ||
| 198 | |||
| 199 | <style lang="scss"> | ||
| 200 | .uni-section-header { | ||
| 201 | display: none !important; | ||
| 202 | } | ||
| 203 | |||
| 204 | .box { | ||
| 205 | background-color: #fff; | ||
| 206 | } | ||
| 207 | |||
| 208 | .nav-box { | ||
| 209 | overflow-x: scroll; | ||
| 210 | } | ||
| 211 | |||
| 212 | .nav-ul { | ||
| 213 | display: flex; | ||
| 214 | justify-content: space-around; | ||
| 215 | width: 100%; | ||
| 216 | |||
| 217 | } | ||
| 218 | |||
| 219 | .nva-li { | ||
| 220 | font-size: 26rpx; | ||
| 221 | padding: 10rpx 0rpx; | ||
| 222 | margin: 0 15rpx; | ||
| 223 | |||
| 224 | } | ||
| 225 | |||
| 226 | .nt { | ||
| 227 | font-size: 30rpx; | ||
| 228 | font-weight: 400; | ||
| 229 | border-bottom: 4rpx solid #AD181F; | ||
| 230 | } | ||
| 231 | |||
| 232 | |||
| 233 | .taber { | ||
| 234 | width: 100%; | ||
| 235 | padding: 25rpx 30rpx; | ||
| 236 | padding-bottom: 0; | ||
| 237 | } | ||
| 238 | |||
| 239 | .segmented-control__text { | ||
| 240 | font-size: 26rpx !important; | ||
| 241 | font-family: PingFang SC !important; | ||
| 242 | font-weight: 400 !important; | ||
| 243 | color: #4c5359 !important; | ||
| 244 | } | ||
| 245 | |||
| 246 | .segmented-control__item--text { | ||
| 247 | border-bottom: 4rpx solid #54e1b9; | ||
| 248 | font-size: 30rpx !important; | ||
| 249 | font-family: PingFang SC !important; | ||
| 250 | font-weight: 500 !important; | ||
| 251 | color: #2b3133 !important; | ||
| 252 | } | ||
| 253 | |||
| 254 | .title { | ||
| 255 | display: flex; | ||
| 256 | justify-content: space-between; | ||
| 257 | |||
| 258 | .navSerch { | ||
| 259 | width:100%;height:100rpx;flex:1 1 auto; | ||
| 260 | position: relative; | ||
| 261 | |||
| 262 | .serch { | ||
| 263 | width:100%; | ||
| 264 | } | ||
| 265 | } | ||
| 266 | |||
| 267 | .searchLeft { | ||
| 268 | font-size: 26rpx; | ||
| 269 | font-family: PingFang SC; | ||
| 270 | font-weight: 400; | ||
| 271 | color: #000000; | ||
| 272 | margin-top: 25rpx; | ||
| 273 | display: flex; | ||
| 274 | } | ||
| 275 | |||
| 276 | .uni-searchbar__cancel { | ||
| 277 | display: none; | ||
| 278 | } | ||
| 279 | |||
| 280 | :deep(.uni-select) { | ||
| 281 | border: 0; | ||
| 282 | // padding-left: 20rpx; | ||
| 283 | } | ||
| 284 | |||
| 285 | :deep(.uni-select__input-text) { | ||
| 286 | font-size: 26rpx; | ||
| 287 | font-family: PingFang SC; | ||
| 288 | font-weight: 400; | ||
| 289 | color: #000000; | ||
| 290 | margin-right: 14rpx; | ||
| 291 | width: 110rpx; | ||
| 292 | text-align: right; | ||
| 293 | } | ||
| 294 | |||
| 295 | :deep(.uni-select__selector-item) { | ||
| 296 | // padding: 0 auto; | ||
| 297 | text-align: center; | ||
| 298 | font-size: 26rpx; | ||
| 299 | font-family: PingFang SC; | ||
| 300 | font-weight: 400; | ||
| 301 | color: #000000; | ||
| 302 | } | ||
| 303 | } | ||
| 304 | |||
| 305 | // 搜索框 | ||
| 306 | .search-result { | ||
| 307 | padding-top: 10rpx; | ||
| 308 | padding-bottom: 20rpx; | ||
| 309 | text-align: center; | ||
| 310 | } | ||
| 311 | |||
| 312 | .search-result-text { | ||
| 313 | text-align: center; | ||
| 314 | font-size: 14rpx; | ||
| 315 | color: #666; | ||
| 316 | } | ||
| 317 | |||
| 318 | :deep(.uni-searchbar) {box-sizing: border-box; | ||
| 319 | } | ||
| 320 | |||
| 321 | .uni-searchbar__box { | ||
| 322 | padding-right: 0rpx !important; | ||
| 323 | } | ||
| 324 | |||
| 325 | .example-body { | ||
| 326 | /* #ifndef APP-NVUE */ | ||
| 327 | display: block; | ||
| 328 | /* #endif */ | ||
| 329 | padding: 0px; | ||
| 330 | } | ||
| 331 | |||
| 332 | .uni-mt-10 { | ||
| 333 | width: 600rpx; | ||
| 334 | } | ||
| 335 | |||
| 336 | // 分段器 | ||
| 337 | .example-body { | ||
| 338 | /* #ifndef APP-NVUE */ | ||
| 339 | display: flex; | ||
| 340 | /* #endif */ | ||
| 341 | flex-direction: row; | ||
| 342 | padding: 0; | ||
| 343 | } | ||
| 344 | |||
| 345 | .uni-common-mt { | ||
| 346 | margin-top: 30rpx; | ||
| 347 | } | ||
| 348 | |||
| 349 | .uni-padding-wrap { | ||
| 350 | // width: 750rpx; | ||
| 351 | padding: 0rpx 30rpx; | ||
| 352 | } | ||
| 353 | |||
| 354 | .content { | ||
| 355 | /* #ifndef APP-NVUE */ | ||
| 356 | display: flex; | ||
| 357 | /* #endif */ | ||
| 358 | justify-content: center; | ||
| 359 | // height: 1235rpx; | ||
| 360 | text-align: center; | ||
| 361 | } | ||
| 362 | |||
| 363 | .content-text { | ||
| 364 | font-size: 14rpx; | ||
| 365 | color: #666; | ||
| 366 | } | ||
| 367 | |||
| 368 | .color-tag { | ||
| 369 | width: 25rpx; | ||
| 370 | height: 25rpx; | ||
| 371 | } | ||
| 372 | |||
| 373 | .uni-list { | ||
| 374 | flex: 1; | ||
| 375 | } | ||
| 376 | |||
| 377 | .uni-list-item { | ||
| 378 | /* #ifndef APP-NVUE */ | ||
| 379 | display: flex; | ||
| 380 | /* #endif */ | ||
| 381 | flex: 1; | ||
| 382 | flex-direction: row; | ||
| 383 | background-color: #ffffff; | ||
| 384 | } | ||
| 385 | |||
| 386 | .uni-list-item__container { | ||
| 387 | padding: 12rpx 15rpx; | ||
| 388 | width: 100%; | ||
| 389 | flex: 1; | ||
| 390 | position: relative; | ||
| 391 | /* #ifndef APP-NVUE */ | ||
| 392 | display: flex; | ||
| 393 | box-sizing: border-box; | ||
| 394 | /* #endif */ | ||
| 395 | flex-direction: row; | ||
| 396 | justify-content: space-between; | ||
| 397 | align-items: center; | ||
| 398 | border-bottom-style: solid; | ||
| 399 | border-bottom-width: 1rpx; | ||
| 400 | border-bottom-color: #eee; | ||
| 401 | } | ||
| 402 | |||
| 403 | .uni-list-item__content-title { | ||
| 404 | font-size: 14rpx; | ||
| 405 | } | ||
| 406 | |||
| 407 | .chat-custom-right { | ||
| 408 | flex: 1; | ||
| 409 | /* #ifndef APP-NVUE */ | ||
| 410 | display: flex; | ||
| 411 | /* #endif */ | ||
| 412 | flex-direction: column; | ||
| 413 | justify-content: space-between; | ||
| 414 | align-items: flex-end; | ||
| 415 | } | ||
| 416 | |||
| 417 | .chat-custom-text { | ||
| 418 | font-size: 12rpx; | ||
| 419 | color: #999; | ||
| 420 | } | ||
| 421 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or sign in to post a comment