Merge branch 'master' of https://code.itechtop.cn/yangyang/ztx_wx_gzt
Showing
5 changed files
with
496 additions
and
421 deletions
| ... | @@ -416,6 +416,16 @@ export function audit(data) { | ... | @@ -416,6 +416,16 @@ export function audit(data) { |
| 416 | }) | 416 | }) |
| 417 | } | 417 | } |
| 418 | 418 | ||
| 419 | // 个人会员新版本审核 | ||
| 420 | export function auditApi(data) { | ||
| 421 | return request({ | ||
| 422 | url: `/person/paymentRangeNew/audit/${data.ids}?reason=${data.reason}&flag=${data.flag}`, | ||
| 423 | method: 'post', | ||
| 424 | params: data | ||
| 425 | }) | ||
| 426 | } | ||
| 427 | |||
| 428 | |||
| 419 | // 审核详情 | 429 | // 审核详情 |
| 420 | export function getHistoryByRelateId(rId) { | 430 | export function getHistoryByRelateId(rId) { |
| 421 | return request({ | 431 | return request({ |
| ... | @@ -1950,3 +1960,12 @@ export function GroupGetLogs(id) { | ... | @@ -1950,3 +1960,12 @@ export function GroupGetLogs(id) { |
| 1950 | }) | 1960 | }) |
| 1951 | } | 1961 | } |
| 1952 | 1962 | ||
| 1963 | |||
| 1964 | // 新个人会员审批 | ||
| 1965 | export function auditList(params) { | ||
| 1966 | return request({ | ||
| 1967 | url: '/person/paymentRangeNew/list', | ||
| 1968 | method: 'get', | ||
| 1969 | params: params | ||
| 1970 | }) | ||
| 1971 | } | ... | ... |
This diff could not be displayed because it is too large.
pages/index/image.js
0 → 100644
This diff could not be displayed because it is too large.
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <view class="text-center whitebg" v-if="userType=='2'"> | 3 | <!-- <view class="text-center whitebg" v-if="userType=='2'">--> |
| 4 | <view class="cardNav" v-if="userType=='2'"> | 4 | <!-- <view class="cardNav" v-if="userType=='2'">--> |
| 5 | <view class="active">审核</view> | 5 | <!-- <view class="active">审核</view>--> |
| 6 | <view @click="goMerge">合并</view> | 6 | <!-- <view @click="goMerge">合并</view>--> |
| 7 | <view @click="goMergeUp">提交</view> | 7 | <!-- <view @click="goMergeUp">提交</view>--> |
| 8 | </view> | 8 | <!-- </view>--> |
| 9 | </view> | 9 | <!-- </view>--> |
| 10 | <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" | 10 | <uni-segmented-control |
| 11 | styleType="text" activeColor="#AD181F"></uni-segmented-control> | 11 | :current="current" |
| 12 | 12 | :values="navs" | |
| 13 | <!-- 缴费审核 --> | 13 | activeColor="#AD181F" |
| 14 | <view v-if="total>0" class="vipData" style="flex-wrap: wrap;"> | 14 | class="whitebg" |
| 15 | <view class="w50">人数合计 <text>{{ statistical.personCount }} 人</text></view> | 15 | styleType="text" |
| 16 | <view class="w50">新会员合计 <text>{{ statistical.newPersonCount }} 人</text></view> | 16 | @clickItem="onClickItem"> |
| 17 | <view class="w50">续费合计 <text>{{ statistical.oldPersonCount }} 人</text></view> | 17 | </uni-segmented-control> |
| 18 | <view class="w50">年限合计 <text>{{ statistical.totalYear }} 年</text></view> | 18 | |
| 19 | </view> | 19 | <!-- 缴费审核 --> |
| 20 | <view class="appList"> | 20 | <view v-if="total>0" class="vipData" style="flex-wrap: wrap;"> |
| 21 | <view class="appItem" v-for="(item,index) in list" :key="index"> | 21 | <view class="w50">费用合计 |
| 22 | <view class="status" @click="goDetail(item)"> | 22 | <text>{{ statistical.totalCost?.toFixed(2) }}元</text> |
| 23 | <text v-if="item.auditStatus==0" class="text-primary">审核中</text> | 23 | </view> |
| 24 | <text v-if="item.auditStatus==1" class="text-success"> 审核通过</text> | 24 | <view class="w50">人数合计 |
| 25 | <text v-if="item.auditStatus==2" class="text-danger"> 审核拒绝</text> | 25 | <text>{{ statistical.personCount }} 人</text> |
| 26 | <text v-if="item.auditStatus==3" class="text-warning">已撤回</text> | 26 | </view> |
| 27 | </view> | 27 | <view class="w50">新会员合计 |
| 28 | <view class="date" @click="goDetail(item)"> | 28 | <text>{{ statistical.newPersonCount }} 人</text> |
| 29 | <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons> | 29 | </view> |
| 30 | {{item.content.commitTime}} 提交 | 30 | <view class="w50">续费合计 |
| 31 | </view> | 31 | <text>{{ statistical.oldPersonCount }} 年</text> |
| 32 | <view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}} | 32 | </view> |
| 33 | </view> | 33 | <view class="w50">年限合计 |
| 34 | <view class="name" @click="goDetail(item)">{{item.content.name}}</view> | 34 | <text>{{ statistical.totalYear }} 年</text> |
| 35 | <view class="flexbox" @click="goDetail(item)"> | 35 | </view> |
| 36 | <view> | 36 | </view> |
| 37 | 人数合计 | 37 | <view class="appList"> |
| 38 | <view>{{item.content.personCount}}</view> | 38 | <view v-for="(item,index) in list" :key="index" class="appItem"> |
| 39 | </view> | 39 | <view class="status" @click="goDetail(item)"> |
| 40 | <view> | 40 | <text v-if="item.auditStatus==1" class="text-primary">审核中</text> |
| 41 | 年限合计 | 41 | <text v-if="item.auditStatus==2" class="text-success"> 审核通过</text> |
| 42 | <view>{{item.content.totalYear}}</view> | 42 | <text v-if="item.auditStatus==3" class="text-danger"> 审核拒绝</text> |
| 43 | </view> | 43 | </view> |
| 44 | <view> | 44 | <view class="date" @click="goDetail(item)"> |
| 45 | 提交单位 | 45 | <uni-icons color="#AD181F" size="16" type="calendar-filled"></uni-icons> |
| 46 | <view>{{item.content.memberName}}</view> | 46 | {{ item.commitTime }} 提交 |
| 47 | </view> | 47 | </view> |
| 48 | </view> | 48 | <view v-if="item?.wfCode" class="text-primary" @click="goDetail(item)">{{ item.wfCode }} |
| 49 | <view class="func" v-if="item.auditStatus==0"> | 49 | </view> |
| 50 | <button @click="audit(item.recordId,'0')">拒绝</button> | 50 | <view class="name" @click="goDetail(item)">{{ item.memName }}</view> |
| 51 | <button @click="audit(item.recordId,'1')">同意</button> | 51 | <view class="flexbox" @click="goDetail(item)"> |
| 52 | </view> | 52 | <view> |
| 53 | <view class="func" v-if="item.auditStatus==1 && item.isView == 1"> | 53 | 人数合计 |
| 54 | <button @click="handleDelete(item)">撤回</button> | 54 | <view>{{ item.allCount }}</view> |
| 55 | </view> | 55 | </view> |
| 56 | </view> | 56 | <view> |
| 57 | </view> | 57 | 年限合计 |
| 58 | 58 | <view>{{ item.yearCount }}</view> | |
| 59 | 59 | </view> | |
| 60 | 60 | <view> | |
| 61 | <view class="nodata" v-if="list.length==0"> | 61 | 新会员 |
| 62 | <image mode="aspectFit" :src="config.baseUrl_api + '/fs/static/nodata.png'"></image> | 62 | <view>{{ item.newCount }}</view> |
| 63 | <text>暂无数据</text> | 63 | </view> |
| 64 | </view> | 64 | <view> |
| 65 | <!-- <view v-if="userType=='2'" class="block-btn-box"> | 65 | 费用 |
| 66 | <button @click="goMerge" class="btn-red-kx">前往合并 > </button> | 66 | <view>¥{{ (item.price * 1).toFixed(2) }}</view> |
| 67 | </view> --> | 67 | </view> |
| 68 | </view> | 68 | </view> |
| 69 | <view v-if="item.auditStatus==1" class="func"> | ||
| 70 | <button @click="audit(item,'2')">拒绝</button> | ||
| 71 | <button @click="audit(item,'1')">同意</button> | ||
| 72 | </view> | ||
| 73 | <!-- <view v-if="item.auditStatus==1 && item.isView == 1" class="func">--> | ||
| 74 | <!-- <button @click="handleDelete(item)">撤回</button>--> | ||
| 75 | <!-- </view>--> | ||
| 76 | </view> | ||
| 77 | </view> | ||
| 78 | |||
| 79 | |||
| 80 | <view v-if="list.length==0" class="nodata"> | ||
| 81 | <image :src="config.baseUrl_api + '/fs/static/nodata.png'" mode="aspectFit"></image> | ||
| 82 | <text>暂无数据</text> | ||
| 83 | </view> | ||
| 84 | <!-- <view v-if="userType=='2'" class="block-btn-box"> | ||
| 85 | <button @click="goMerge" class="btn-red-kx">前往合并 > </button> | ||
| 86 | </view> --> | ||
| 87 | </view> | ||
| 69 | </template> | 88 | </template> |
| 70 | 89 | ||
| 71 | <script setup> | 90 | <script setup> |
| 72 | import * as api from '@/common/api.js' | 91 | import * as api from '@/common/api.js' |
| 73 | import config from '@/config.js' | 92 | import config from '@/config.js' |
| 74 | import { | 93 | import {ref} from 'vue' |
| 75 | onMounted, | 94 | import {onShow} from '@dcloudio/uni-app' |
| 76 | ref | ||
| 77 | } from 'vue' | ||
| 78 | import { | ||
| 79 | onShow | ||
| 80 | } from '@dcloudio/uni-app' | ||
| 81 | const app = getApp(); | ||
| 82 | const queryParams = ref({ | ||
| 83 | // pageNum: 1, | ||
| 84 | // pageSize: 10 | ||
| 85 | auditStatus: '0' | ||
| 86 | }) | ||
| 87 | const navs = ref(['待审核', '审核通过', '审核拒绝', '撤回']) | ||
| 88 | const current = ref(0) | ||
| 89 | const list = ref([]) | ||
| 90 | const statistical = ref({}) | ||
| 91 | const total = ref(0) | ||
| 92 | const deptType = ref('') | ||
| 93 | const userType = ref('') | ||
| 94 | onShow(() => { | ||
| 95 | if (app.globalData.isLogin) { | ||
| 96 | init() | ||
| 97 | } else { | ||
| 98 | app.firstLoadCallback = () => { | ||
| 99 | init() | ||
| 100 | }; | ||
| 101 | } | ||
| 102 | }) | ||
| 103 | |||
| 104 | function init() { | ||
| 105 | userType.value = app.globalData.userType | ||
| 106 | deptType.value = app.globalData.deptType | ||
| 107 | getList() | ||
| 108 | } | ||
| 109 | |||
| 110 | function onClickItem(e) { | ||
| 111 | console.log(e) | ||
| 112 | queryParams.value.auditStatus = e.currentIndex | ||
| 113 | getList() | ||
| 114 | } | ||
| 115 | |||
| 116 | function getList() { | ||
| 117 | uni.showLoading({ | ||
| 118 | title: `加载中`, | ||
| 119 | mask: true | ||
| 120 | }) | ||
| 121 | statistical.value = { | ||
| 122 | personCount: 0, | ||
| 123 | newPersonCount: 0, | ||
| 124 | oldPersonCount: 0, | ||
| 125 | totalYear: 0 | ||
| 126 | } | ||
| 127 | if (deptType.value == 2 || deptType.value == 3) { | ||
| 128 | queryParams.value.mergeFlag = 0 | ||
| 129 | } | ||
| 130 | api.getVerifyList(queryParams.value).then(res => { | ||
| 131 | list.value = res.rows | ||
| 132 | list.value.forEach(item => { | ||
| 133 | item.content = JSON.parse(item.content) | ||
| 134 | statistical.value.personCount += (item.content.personCount * 1) | ||
| 135 | statistical.value.newPersonCount += (item.content.newPersonCount * 1) | ||
| 136 | statistical.value.oldPersonCount += (item.content.oldPersonCount * 1) | ||
| 137 | statistical.value.totalYear += (item.content.totalYear * 1) | ||
| 138 | 95 | ||
| 139 | }) | 96 | const app = getApp(); |
| 140 | total.value = res.total | 97 | const queryParams = ref({ |
| 141 | uni.hideLoading() | 98 | // pageNum: 1, |
| 142 | }) | 99 | // pageSize: 10 |
| 143 | } | 100 | auditStatus: "1", |
| 101 | auditFlag: "1" | ||
| 102 | |||
| 103 | }) | ||
| 104 | const navs = ref(['待审核', '审核通过', '审核拒绝',]) | ||
| 105 | const current = ref(0) | ||
| 106 | const list = ref([]) | ||
| 107 | const statistical = ref({}) | ||
| 108 | const total = ref(0) | ||
| 109 | const deptType = ref('') | ||
| 110 | const userType = ref('') | ||
| 111 | onShow(() => { | ||
| 112 | if (app.globalData.isLogin) { | ||
| 113 | init() | ||
| 114 | } else { | ||
| 115 | app.firstLoadCallback = () => { | ||
| 116 | init() | ||
| 117 | }; | ||
| 118 | } | ||
| 119 | }) | ||
| 144 | 120 | ||
| 145 | function handleDelete(row) { | 121 | function init() { |
| 146 | uni.showModal({ | 122 | userType.value = app.globalData.userType |
| 147 | title: '提示', | 123 | deptType.value = app.globalData.deptType |
| 148 | content: `确定撤回 ${row.content.name}?`, | 124 | getList() |
| 149 | success: function(res) { | 125 | } |
| 150 | if (res.confirm) { | ||
| 151 | api.withDraw({ | ||
| 152 | recordId: row.recordId, | ||
| 153 | reason: row.reason | ||
| 154 | }).then(res => { | ||
| 155 | uni.showToast({ | ||
| 156 | title: `操作成功` | ||
| 157 | }) | ||
| 158 | getList() | ||
| 159 | }) | ||
| 160 | } | ||
| 161 | } | ||
| 162 | }) | ||
| 163 | } | ||
| 164 | 126 | ||
| 165 | function audit(recordId, flag) { | 127 | function onClickItem(e) { |
| 166 | if (flag == '0') { | 128 | queryParams.value.auditStatus = e.currentIndex + 1 |
| 167 | // 拒绝 | 129 | console.log(queryParams.value.auditStatus) |
| 168 | // 弹出框填写理由 | 130 | getList() |
| 169 | uni.showModal({ | 131 | } |
| 170 | title: '请输入拒绝理由', | ||
| 171 | editable: true, | ||
| 172 | success: function(res) { | ||
| 173 | if (res.confirm) { | ||
| 174 | if (!res.content) { | ||
| 175 | uni.showToast({ | ||
| 176 | title: '请输入拒绝理由', | ||
| 177 | icon: 'none' | ||
| 178 | }) | ||
| 179 | } else { | ||
| 180 | doApproval(recordId, flag, res.content) | ||
| 181 | } | ||
| 182 | } | ||
| 183 | } | ||
| 184 | }) | ||
| 185 | } else if (flag == '1') { | ||
| 186 | // 二次确认 | ||
| 187 | uni.showModal({ | ||
| 188 | title: '提示', | ||
| 189 | content: `确定审批通过吗`, | ||
| 190 | success: function(res) { | ||
| 191 | if (res.confirm) { | ||
| 192 | doApproval(recordId, flag) | ||
| 193 | } | ||
| 194 | } | ||
| 195 | }) | ||
| 196 | } | ||
| 197 | } | ||
| 198 | 132 | ||
| 199 | function doApproval(recordId, flag, reason) { | 133 | async function getList() { |
| 200 | var obj = { | 134 | uni.showLoading({ |
| 201 | flag: flag, | 135 | title: `加载中`, |
| 202 | reason: reason || '', | 136 | mask: true |
| 203 | recordIds: [] | 137 | }) |
| 204 | } | 138 | if (deptType.value == 2 || deptType.value == 3) { |
| 205 | obj.recordIds.push(recordId) | 139 | queryParams.value.mergeFlag = 0 |
| 206 | console.log(obj) | 140 | } |
| 207 | uni.showLoading({ | 141 | const res = await api.auditList(queryParams.value) |
| 208 | title: '加载中', | 142 | list.value = res.rows |
| 209 | mask: true | 143 | total.value = res.total |
| 210 | }) | 144 | statistical.value = { |
| 211 | api.audit(obj).then((res) => { | 145 | totalCost: 0, |
| 212 | uni.hideLoading() | 146 | personCount: 0, |
| 213 | uni.showToast({ | 147 | newPersonCount: 0, |
| 214 | title: '操作成功', | 148 | oldPersonCount: 0, |
| 215 | icon: 'none' | 149 | totalYear: 0 |
| 216 | }) | 150 | } |
| 217 | getList() | 151 | for (const val of list.value) { |
| 218 | }) | 152 | statistical.value.totalCost += val.price * 1 |
| 219 | } | 153 | statistical.value.personCount += val.allCount * 1 |
| 154 | statistical.value.newPersonCount += val.newCount * 1 | ||
| 155 | statistical.value.oldPersonCount += val.oldCount * 1 | ||
| 156 | statistical.value.totalYear += val.yearCount * 1 | ||
| 157 | } | ||
| 158 | uni.hideLoading() | ||
| 159 | |||
| 160 | } | ||
| 220 | 161 | ||
| 221 | function goDetail(item) { | 162 | function handleDelete(row) { |
| 222 | const form = encodeURIComponent(JSON.stringify(item)) | 163 | uni.showModal({ |
| 223 | // console.log(userType.value) | 164 | title: '提示', |
| 165 | content: `确定撤回 ${row.name}?`, | ||
| 166 | success: function (res) { | ||
| 167 | if (res.confirm) { | ||
| 168 | api.withDraw({ | ||
| 169 | recordId: row.recordId, | ||
| 170 | reason: row.reason | ||
| 171 | }).then(res => { | ||
| 172 | uni.showToast({ | ||
| 173 | title: `操作成功` | ||
| 174 | }) | ||
| 175 | getList() | ||
| 176 | }) | ||
| 177 | } | ||
| 178 | } | ||
| 179 | }) | ||
| 180 | } | ||
| 224 | 181 | ||
| 225 | let path = | 182 | function audit(item, flag) { |
| 226 | `/personalVip/auditDetail?form=${form}` | 183 | if (flag == '2') { |
| 227 | uni.navigateTo({ | 184 | // 拒绝 |
| 228 | url: path | 185 | // 弹出框填写理由 |
| 229 | }); | 186 | uni.showModal({ |
| 187 | title: '请输入拒绝理由', | ||
| 188 | editable: true, | ||
| 189 | success: function (res) { | ||
| 190 | if (res.confirm) { | ||
| 191 | if (!res.content) { | ||
| 192 | uni.showToast({ | ||
| 193 | title: '请输入拒绝理由', | ||
| 194 | icon: 'none' | ||
| 195 | }) | ||
| 196 | return | ||
| 197 | } else { | ||
| 198 | doApproval(item.rangId, flag, res.content) | ||
| 199 | } | ||
| 200 | } | ||
| 201 | } | ||
| 202 | }) | ||
| 203 | } | ||
| 204 | if (flag == '1') { | ||
| 205 | // 二次确认 | ||
| 206 | uni.showModal({ | ||
| 207 | title: '提示', | ||
| 208 | content: `确定审批通过吗`, | ||
| 209 | success: function (res) { | ||
| 210 | if (res.confirm) { | ||
| 211 | doApproval(item.rangId, flag) | ||
| 212 | } | ||
| 213 | } | ||
| 214 | }) | ||
| 215 | } | ||
| 216 | } | ||
| 230 | 217 | ||
| 218 | function doApproval(recordId, flag, reason) { | ||
| 219 | let obj = { | ||
| 220 | flag: flag, | ||
| 221 | reason: reason || '', | ||
| 222 | ids: [] | ||
| 223 | } | ||
| 224 | obj.ids.push(recordId) | ||
| 225 | console.log(obj) | ||
| 226 | uni.showLoading({ | ||
| 227 | title: '加载中', | ||
| 228 | mask: true | ||
| 229 | }) | ||
| 230 | api.auditApi(obj).then((res) => { | ||
| 231 | uni.hideLoading() | ||
| 232 | uni.showToast({ | ||
| 233 | title: '操作成功', | ||
| 234 | icon: 'none' | ||
| 235 | }) | ||
| 236 | getList() | ||
| 237 | }) | ||
| 238 | } | ||
| 231 | 239 | ||
| 232 | } | 240 | function goDetail(item) { |
| 241 | const form = encodeURIComponent(JSON.stringify(item)) | ||
| 242 | // console.log(userType.value) | ||
| 243 | |||
| 244 | // let path = | ||
| 245 | // `/personalVip/auditDetail?form=${form}` | ||
| 246 | // uni.navigateTo({ | ||
| 247 | // url: path | ||
| 248 | // }); | ||
| 249 | |||
| 250 | let path = | ||
| 251 | `/personalVip/paymentDetail?form=${form}` | ||
| 252 | uni.navigateTo({ | ||
| 253 | url: path | ||
| 254 | }); | ||
| 255 | |||
| 256 | |||
| 257 | } | ||
| 233 | 258 | ||
| 234 | function goMerge() { | 259 | function goMerge() { |
| 235 | let path = `/personalVip/sheng/merge` | 260 | let path = `/personalVip/sheng/merge` |
| 236 | uni.redirectTo({ | 261 | uni.redirectTo({ |
| 237 | url: path | 262 | url: path |
| 238 | }); | 263 | }); |
| 239 | } | 264 | } |
| 240 | 265 | ||
| 241 | function goMergeUp() { | 266 | function goMergeUp() { |
| 242 | let path = `/personalVip/sheng/mergeUp` | 267 | let path = `/personalVip/sheng/mergeUp` |
| 243 | uni.redirectTo({ | 268 | uni.redirectTo({ |
| 244 | url: path | 269 | url: path |
| 245 | }); | 270 | }); |
| 246 | } | 271 | } |
| 247 | </script> | 272 | </script> |
| 248 | 273 | ||
| 249 | <style> | 274 | <style> |
| 250 | 275 | ||
| 251 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 276 | </style> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <view class="wBox"> | 3 | <view class="wBox"> |
| 4 | <view class="tt">{{form.paymentName}}</view> | 4 | <view class="tt">{{ form.memName }}</view> |
| 5 | <view class="info"> | 5 | <view class="info" style="flex-wrap: wrap;"> |
| 6 | <view>共<text>{{list.length}}</text>人</view> | 6 | <view class="w45">共 |
| 7 | </view> | 7 | <text class="text-danger"> {{ form?.allCount }}</text> |
| 8 | <view class="userlist"> | 8 | 人 |
| 9 | <view class="item" v-for="(n,index) in list" :key="index"> | 9 | </view> |
| 10 | <view> | 10 | <view class="w45">新会员 |
| 11 | <view class="name">{{n.perName}}<text v-if="n.memberInfoName">({{n.memberInfoName || ''}})</text></view> | 11 | <text class="text-primary"> {{ form?.newCount }}</text> |
| 12 | <view class="date">原有效期至 {{n.originValidityDate ? n.originValidityDate.slice(0,10) : '--'}}</view> | 12 | 人 |
| 13 | </view> | 13 | </view> |
| 14 | <view class="nian"> | 14 | <view class="w45">续费合计 |
| 15 | {{n.payYear}}年 | 15 | <text class="text-primary"> {{ form?.oldCount }}</text> |
| 16 | </view> | 16 | 人 |
| 17 | </view> | 17 | </view> |
| 18 | </view> | 18 | <view class="w45">费用合计 |
| 19 | </view> | 19 | <text class="text-danger">{{ form?.price }}</text> |
| 20 | 20 | 元 | |
| 21 | <view class="h3-padding" v-if="feelList.length>0">审核流程</view> | 21 | </view> |
| 22 | <view class="wBox" v-if="feelList.length>0"> | 22 | </view> |
| 23 | <view class="stepItem" v-for="(n,index) in feelList" :key="index"> | 23 | </view> |
| 24 | <view class="time">{{n.auditTime || '待审批'}}</view> | 24 | |
| 25 | <view class="content"> | 25 | |
| 26 | <view class="status"> | 26 | <view class="wBox"> |
| 27 | <text v-if="n.auditResult==0" class="text-primary"> 审核中</text> | 27 | <!-- <view class="tt">{{ // form.paymentName }}</view>--> |
| 28 | <text v-if="n.auditResult==1" class="text-success">审核通过</text> | 28 | <view class="info"> |
| 29 | <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> | 29 | <view>共 |
| 30 | <text v-if="n.auditResult==3" class="text-warning"> 已撤回</text> | 30 | <text>{{ list.length }}</text> |
| 31 | </view> | 31 | 人 |
| 32 | <view class="name">第 {{index+1}} 步</view> | 32 | </view> |
| 33 | <view class="deptName">{{n.auditDeptName || n.auditBy}}</view> | 33 | </view> |
| 34 | <view>备注:{{n.auditMsg || '/' }}</view> | 34 | <view class="userlist"> |
| 35 | </view> | 35 | <view v-for="(n,index) in list" :key="index" class="item"> |
| 36 | </view> | 36 | <view> |
| 37 | </view> | 37 | <view class="name">{{ n.perName }} |
| 38 | </view> | 38 | <text v-if="n.memberInfoName">({{ n.memberInfoName || '' }})</text> |
| 39 | </view> | ||
| 40 | <view class="date">原有效期至 {{ n.originValidityDate ? n.originValidityDate.slice(0, 10) : '--' }}</view> | ||
| 41 | </view> | ||
| 42 | <view class="nian"> | ||
| 43 | {{ n.payYear }}年 | ||
| 44 | </view> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | |||
| 49 | <view v-if="feelList.length>0" class="h3-padding">审核流程</view> | ||
| 50 | <view v-if="feelList.length>0" class="wBox"> | ||
| 51 | <view v-for="(n,index) in feelList" :key="index" class="stepItem"> | ||
| 52 | <view class="time">{{ n.auditTime || '待审批' }}</view> | ||
| 53 | <view class="content"> | ||
| 54 | <view class="status"> | ||
| 55 | <text v-if="n.auditResult==0" class="text-primary"> 审核中</text> | ||
| 56 | <text v-if="n.auditResult==1" class="text-success">审核通过</text> | ||
| 57 | <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> | ||
| 58 | <text v-if="n.auditResult==3" class="text-warning"> 已撤回</text> | ||
| 59 | </view> | ||
| 60 | <view class="name">第 {{ index + 1 }} 步</view> | ||
| 61 | <view class="deptName">{{ n.auditDeptName || n.auditBy }}</view> | ||
| 62 | <view>备注:{{ n.auditMsg || '/' }}</view> | ||
| 63 | </view> | ||
| 64 | </view> | ||
| 65 | </view> | ||
| 66 | </view> | ||
| 39 | </template> | 67 | </template> |
| 40 | 68 | ||
| 41 | <script setup> | 69 | <script setup> |
| 42 | import * as api from '@/common/api.js' | 70 | import * as api from '@/common/api.js' |
| 43 | import { ref } from 'vue' | 71 | import {ref} from 'vue' |
| 44 | import { onLoad } from '@dcloudio/uni-app' | 72 | import {onLoad} from '@dcloudio/uni-app' |
| 45 | 73 | ||
| 46 | // 查询参数(和PC保持一致) | 74 | // 查询参数(和PC保持一致) |
| 47 | const queryParams = ref({ | 75 | const queryParams = ref({ |
| 48 | rangeId: '', | 76 | rangeId: '', |
| 49 | pageNum: 1, | 77 | pageNum: 1, |
| 50 | pageSize: 999 | 78 | pageSize: 999 |
| 51 | }) | 79 | }) |
| 52 | 80 | ||
| 53 | const form = ref({}) | 81 | const form = ref({}) |
| 54 | const list = ref([]) | 82 | const list = ref([]) |
| 55 | const feelList = ref([]) | 83 | const feelList = ref([]) |
| 56 | 84 | ||
| 57 | onLoad((option) => { | 85 | onLoad((option) => { |
| 58 | if (option.form) { | 86 | if (option.form) { |
| 59 | form.value = JSON.parse(decodeURIComponent(option.form)) | 87 | form.value = JSON.parse(decodeURIComponent(option.form)) |
| 60 | queryParams.value.rangeId = form.value.rangId || form.value.rangeId | 88 | queryParams.value.rangeId = form.value.rangId || form.value.rangeId |
| 61 | 89 | getList() | |
| 62 | getList() | 90 | getAuditLogs() |
| 63 | getAuditLogs() | 91 | } |
| 64 | } | 92 | |
| 65 | }) | 93 | console.log(form.value) |
| 66 | 94 | }) | |
| 67 | async function getList() { | 95 | |
| 68 | try { | 96 | async function getList() { |
| 69 | const res = await api.listAPI(queryParams.value) | 97 | try { |
| 70 | list.value = res.rows || [] | 98 | const res = await api.listAPI(queryParams.value) |
| 71 | } catch (e) { | 99 | list.value = res.rows || [] |
| 72 | list.value = [] | 100 | } catch (e) { |
| 73 | console.error('获取成员失败', e) | 101 | list.value = [] |
| 74 | } | 102 | console.error('获取成员失败', e) |
| 75 | } | 103 | } |
| 76 | 104 | } | |
| 77 | function getAuditLogs() { | 105 | |
| 78 | if (form.value.auditLogs) { | 106 | function getAuditLogs() { |
| 79 | try { | 107 | if (form.value.auditLogs) { |
| 80 | feelList.value = JSON.parse(form.value.auditLogs) | 108 | try { |
| 81 | } catch (e) { | 109 | feelList.value = JSON.parse(form.value.auditLogs) |
| 82 | feelList.value = [] | 110 | } catch (e) { |
| 83 | } | 111 | feelList.value = [] |
| 84 | } | 112 | } |
| 85 | } | 113 | } |
| 114 | } | ||
| 86 | </script> | 115 | </script> |
| 87 | 116 | ||
| 88 | <style scoped lang="scss"> | ||
| 89 | .wBox { | ||
| 90 | width: 700rpx; | ||
| 91 | padding: 30rpx; | ||
| 92 | margin: 20rpx auto 0; | ||
| 93 | background: #FFFFFF; | ||
| 94 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 95 | border-radius: 15rpx; | ||
| 96 | |||
| 97 | .tt { | ||
| 98 | color: #0A1629; | ||
| 99 | font-size: 30rpx; | ||
| 100 | } | ||
| 101 | } | ||
| 102 | |||
| 103 | .userlist { | ||
| 104 | .item { | ||
| 105 | border-bottom: 1px dashed #e5e5e5; | ||
| 106 | position: relative; | ||
| 107 | padding: 20rpx 0; | ||
| 108 | |||
| 109 | .date { | ||
| 110 | margin-top: 10rpx; | ||
| 111 | font-size: 24rpx; | ||
| 112 | color: #999; | ||
| 113 | } | ||
| 114 | |||
| 115 | .name { | ||
| 116 | font-size: 30rpx; | ||
| 117 | text { | ||
| 118 | margin-left: 1em; | ||
| 119 | color: #4C5359; | ||
| 120 | font-size: 26rpx; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | .nian { | ||
| 125 | position: absolute; | ||
| 126 | right: 0; | ||
| 127 | top: 30rpx; | ||
| 128 | font-size: 30rpx; | ||
| 129 | color: #AD181F; | ||
| 130 | } | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | .info { | ||
| 135 | display: flex; | ||
| 136 | margin: 30rpx 0 20rpx; | ||
| 137 | font-size: 28rpx; | ||
| 138 | |||
| 139 | view { | ||
| 140 | color: #7D8592; | ||
| 141 | margin-right: 20rpx; | ||
| 142 | text { | ||
| 143 | color: #AD181F; | ||
| 144 | } | ||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 148 | .h3-padding { | ||
| 149 | padding: 20rpx 30rpx 0; | ||
| 150 | font-size: 30rpx; | ||
| 151 | font-weight: 500; | ||
| 152 | } | ||
| 153 | |||
| 154 | .stepItem { | ||
| 155 | border-left: 2rpx solid #E60012; | ||
| 156 | padding-left: 20rpx; | ||
| 157 | position: relative; | ||
| 158 | margin-bottom: 30rpx; | ||
| 159 | |||
| 160 | &:before { | ||
| 161 | content: ''; | ||
| 162 | width: 12rpx; | ||
| 163 | height: 12rpx; | ||
| 164 | background: #E60012; | ||
| 165 | border-radius: 50%; | ||
| 166 | position: absolute; | ||
| 167 | left: -7rpx; | ||
| 168 | top: 0; | ||
| 169 | } | ||
| 170 | |||
| 171 | .time { | ||
| 172 | font-size: 24rpx; | ||
| 173 | color: #999; | ||
| 174 | } | ||
| 175 | |||
| 176 | .content { | ||
| 177 | margin-top: 10rpx; | ||
| 178 | font-size: 28rpx; | ||
| 179 | |||
| 180 | .status { | ||
| 181 | margin-bottom: 8rpx; | ||
| 182 | } | ||
| 183 | |||
| 184 | .name { | ||
| 185 | font-weight: 500; | ||
| 186 | } | ||
| 187 | |||
| 188 | .deptName { | ||
| 189 | margin: 6rpx 0; | ||
| 190 | color: #666; | ||
| 191 | } | ||
| 192 | } | ||
| 193 | } | ||
| 194 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 117 | <style lang="scss" scoped> | ||
| 118 | .wBox { | ||
| 119 | width: 700rpx; | ||
| 120 | padding: 30rpx; | ||
| 121 | margin: 20rpx auto 0; | ||
| 122 | background: #FFFFFF; | ||
| 123 | box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); | ||
| 124 | border-radius: 15rpx; | ||
| 125 | |||
| 126 | .tt { | ||
| 127 | color: #0A1629; | ||
| 128 | font-size: 30rpx; | ||
| 129 | } | ||
| 130 | } | ||
| 131 | |||
| 132 | .userlist { | ||
| 133 | .item { | ||
| 134 | border-bottom: 1px dashed #e5e5e5; | ||
| 135 | position: relative; | ||
| 136 | padding: 20rpx 0; | ||
| 137 | |||
| 138 | .date { | ||
| 139 | margin-top: 10rpx; | ||
| 140 | font-size: 24rpx; | ||
| 141 | color: #999; | ||
| 142 | } | ||
| 143 | |||
| 144 | .name { | ||
| 145 | font-size: 30rpx; | ||
| 146 | |||
| 147 | text { | ||
| 148 | margin-left: 1em; | ||
| 149 | color: #4C5359; | ||
| 150 | font-size: 26rpx; | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 154 | .nian { | ||
| 155 | position: absolute; | ||
| 156 | right: 0; | ||
| 157 | top: 30rpx; | ||
| 158 | font-size: 30rpx; | ||
| 159 | color: #AD181F; | ||
| 160 | } | ||
| 161 | } | ||
| 162 | } | ||
| 163 | |||
| 164 | .info { | ||
| 165 | display: flex; | ||
| 166 | margin: 30rpx 0 20rpx; | ||
| 167 | font-size: 28rpx; | ||
| 168 | |||
| 169 | view { | ||
| 170 | color: #7D8592; | ||
| 171 | margin-right: 20rpx; | ||
| 172 | |||
| 173 | text { | ||
| 174 | color: #AD181F; | ||
| 175 | } | ||
| 176 | } | ||
| 177 | } | ||
| 178 | |||
| 179 | .h3-padding { | ||
| 180 | padding: 20rpx 30rpx 0; | ||
| 181 | font-size: 30rpx; | ||
| 182 | font-weight: 500; | ||
| 183 | } | ||
| 184 | |||
| 185 | .stepItem { | ||
| 186 | border-left: 2rpx solid #E60012; | ||
| 187 | padding-left: 20rpx; | ||
| 188 | position: relative; | ||
| 189 | margin-bottom: 30rpx; | ||
| 190 | |||
| 191 | &:before { | ||
| 192 | content: ''; | ||
| 193 | width: 12rpx; | ||
| 194 | height: 12rpx; | ||
| 195 | background: #E60012; | ||
| 196 | border-radius: 50%; | ||
| 197 | position: absolute; | ||
| 198 | left: -7rpx; | ||
| 199 | top: 0; | ||
| 200 | } | ||
| 201 | |||
| 202 | .time { | ||
| 203 | font-size: 24rpx; | ||
| 204 | color: #999; | ||
| 205 | } | ||
| 206 | |||
| 207 | .content { | ||
| 208 | margin-top: 10rpx; | ||
| 209 | font-size: 28rpx; | ||
| 210 | |||
| 211 | .status { | ||
| 212 | margin-bottom: 8rpx; | ||
| 213 | } | ||
| 214 | |||
| 215 | .name { | ||
| 216 | font-weight: 500; | ||
| 217 | } | ||
| 218 | |||
| 219 | .deptName { | ||
| 220 | margin: 6rpx 0; | ||
| 221 | color: #666; | ||
| 222 | } | ||
| 223 | } | ||
| 224 | } | ||
| 225 | </style> | ... | ... |
-
Please register or sign in to post a comment