detail.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <template>
  2. <view class="">
  3. <u-modal :show-cancel-button="true" @confirm="submitFailAudit" title="审核意见" :mask-close-able="true" v-model="modelShow" >
  4. <view class="slot-content" style="margin: 20rpx;">
  5. <u-form label-width="150" ref="uForm">
  6. <u-form-item :border-bottom="false">
  7. <u-input height="150" placeholder="请输入审核意见(选填)" v-model="opinion" />
  8. </u-form-item>
  9. </u-form>
  10. </view>
  11. </u-modal>
  12. <view class="data">
  13. <view class="top">
  14. <view class="left">
  15. <view class="title ">
  16. <text class="text-bold">员工姓名:</text>
  17. <text>{{dataDetail.realName}}</text>
  18. </view>
  19. </view>
  20. <view class="right">
  21. <text class="" v-if="dataDetail.auditStatus==1">已通过</text>
  22. <text style="color: #ea7500;" v-if="dataDetail.auditStatus==0">待审核</text>
  23. <text style="color: #da0000;" v-if="dataDetail.auditStatus==2">未通过</text>
  24. </view>
  25. </view>
  26. <view class="item">
  27. <view class="left">
  28. <view style="padding: 20rpx 30rpx 0;">
  29. <view class="flex justify-between">
  30. <view >
  31. <view class="content">
  32. <text class="padding-right-10">微信昵称:</text>
  33. <text>{{dataDetail.name}}</text>
  34. </view>
  35. <view style="padding: 50rpx 0;display: flex;">
  36. <view class="flex justify-center align-center">
  37. <text class="padding-right-10">微信头像:</text>
  38. </view>
  39. <image style="width: 80rpx;height: 80rpx;border-radius: 50%;" :src="dataDetail.avatar"></image>
  40. </view>
  41. </view>
  42. <view class="" v-if="!this.$isEmpty(dataDetail.face)">
  43. <image @click="previewImg(dataDetail.face)" style="width: 200rpx;height: 200rpx;" :src="dataDetail.face" ></image>
  44. <view class="text-center base-color padding-top-10">
  45. (人脸信息)
  46. </view>
  47. </view>
  48. </view>
  49. <view class="content">
  50. <text class="padding-right-10">性别:</text>
  51. <text v-text="dataDetail.sex==2?'女':'男'"></text>
  52. </view>
  53. <view class="content">
  54. <text class="padding-right-10">所属园区:</text>
  55. <text >{{dataDetail.agencyName}}</text>
  56. </view>
  57. <view class="content">
  58. <text class="padding-right-10">所在区域:</text>
  59. <text >{{dataDetail.residentialName}}</text>
  60. </view>
  61. <view class="content">
  62. <text class="padding-right-10">所属企业:</text>
  63. <text >{{dataDetail.enterpriseName}}</text>
  64. </view>
  65. <view class="content">
  66. <text class="padding-right-10">联系方式:</text>
  67. <text>{{dataDetail.phone}}</text>
  68. <image @click.stop="call(dataDetail.phone)" class="call" src="/static/index/call.png" ></image>
  69. </view>
  70. <view class="content">
  71. <text class="padding-right-10">提交时间:</text>
  72. <text>{{dataDetail.createTime}}</text>
  73. </view>
  74. <view class="content" v-if="dataDetail.auditStatus!=0">
  75. <text class="padding-right-10" >审核时间:</text>
  76. <text v-text="dataDetail.auditTime?dataDetail.auditTime:''"></text>
  77. </view>
  78. <view class="content" v-if="dataDetail.auditStatus!=0">
  79. <text class="padding-right-10">审核意见:</text>
  80. <text v-text="dataDetail.opinion?dataDetail.opinion:''"></text>
  81. </view>
  82. <view class="content">
  83. <text class="padding-right-10">认证备注:</text>
  84. <text style="line-height: 50rpx;" v-text="dataDetail.remarks?dataDetail.remarks:''"></text>
  85. </view>
  86. <view style="height: 100rpx;"></view>
  87. </view>
  88. </view>
  89. </view>
  90. </view>
  91. <view v-if="dataDetail.auditStatus==0" :style="{marginBottom:safeAreaBottom}" class="footer-fixed padding-20 bg-white flex justify-end margin-right-30" style="box-sizing: border-box;z-index: 999;border-top: 1rpx solid #f1f1f1;">
  92. <view @click="pass" class="cu-btn df base-bg-color round margin-right-20" >
  93. 审核通过
  94. </view>
  95. <view @click="fail" class="cu-btn df bg-red round " >
  96. 审核不通过
  97. </view>
  98. </view>
  99. </view>
  100. </template>
  101. <script>
  102. export default {
  103. name: 'card',
  104. data() {
  105. return {
  106. opinion:'',
  107. modelShow:false,
  108. id:'',
  109. dataDetail:{}
  110. };
  111. },
  112. onLoad(options) {
  113. this.id=options.id
  114. this.fetchDetail()
  115. },
  116. onShow() {
  117. this.setPreData(false)
  118. },
  119. computed: {
  120. //ios底部安全区域
  121. safeAreaBottom() {
  122. let info = uni.getSystemInfoSync()
  123. let safe = 20
  124. if (
  125. info &&
  126. ['devtools', 'ios'].includes(info.platform) &&
  127. info.statusBarHeight > safe
  128. ) {
  129. return info.statusBarHeight - safe+'px'
  130. }
  131. return 0
  132. }
  133. },
  134. methods:{
  135. call(phone){
  136. uni.makePhoneCall({
  137. phoneNumber:phone
  138. })
  139. },
  140. async send(msgData){
  141. let tokenData={
  142. grantType:this.$api.wxData.subscribe_grant_type,
  143. appId:this.$api.wxData.appId,
  144. secret:this.$api.wxData.secret
  145. }
  146. let res=await this.$api.wxApi.getAccessToken(tokenData)
  147. let token=JSON.parse(res.data).access_token
  148. let subscribeData={
  149. accessToken:token,
  150. touser:msgData.openId,
  151. lang:"zh_CN",
  152. page:'/pages/login/login',
  153. miniprogramState:this.$miniprogramState,
  154. templateId: this.$staffTmplIds[0],
  155. "data": {
  156. "name1": {
  157. "value": this.$cache.get('loginAccount')
  158. },
  159. "phrase5":{
  160. "value": "员工认证"
  161. },
  162. "phrase2": {
  163. "value": msgData.content
  164. },
  165. "thing3": {
  166. "value": msgData.remarks || '已阅'
  167. },
  168. }
  169. }
  170. this.$api.wxApi.subscribe(subscribeData).then(res=>{
  171. console.log(res);
  172. }).catch(err=>{
  173. console.error(err);
  174. })
  175. },
  176. previewImg(img){
  177. let urls=[img]
  178. uni.previewImage({
  179. urls:urls
  180. })
  181. },
  182. fetchDetail(){
  183. this.$api.enterprisestaff.page({id:this.id}).then(res=>{
  184. this.dataDetail=res.data.records[0]
  185. })
  186. },
  187. setPreData(data){
  188. let pages = getCurrentPages();
  189. let prevPage = pages[pages.length - 2];
  190. prevPage.setData({
  191. "flag":data
  192. })
  193. },
  194. pass(){
  195. let item=this.$u.deepClone(this.dataDetail)
  196. this.$showModel("确定审核通过该员工信息?").then(res=>{
  197. item.examine=1
  198. item.auditTime=this.$createDateTime()
  199. this.$api.enterprisestaff.submit(item).then(res=>{
  200. if (res.success==true) {
  201. let msgData={
  202. openId:item.openId,
  203. content:"审核已通过",
  204. remarks:'已审核'
  205. }
  206. this.send(msgData)
  207. }
  208. this.$showModel(res.msg,false).then(res=>{
  209. this.setPreData(true)
  210. uni.navigateBack();
  211. })
  212. })
  213. })
  214. },
  215. /**
  216. * 审核不通过
  217. * @param {Object}
  218. */
  219. submitFailAudit(){
  220. let item=this.$u.deepClone(this.dataDetail)
  221. item.auditStatus=2
  222. item.auditTime=this.$createDateTime()
  223. item.opinion=this.opinion
  224. this.$api.enterprisestaff.submit(item).then(res=>{
  225. if (res.success) {
  226. let msgData={
  227. openId: item.openId,
  228. content:"审核不通过",
  229. remarks:item.opinion || '审核不通过',
  230. }
  231. this.send(msgData)
  232. }
  233. this.$showModel(res.msg,false).then(res=>{
  234. this.setPreData(true)
  235. uni.navigateBack({
  236. delta:1
  237. })
  238. })
  239. })
  240. },
  241. fail(){
  242. this.modelShow=true
  243. }
  244. }
  245. };
  246. </script>
  247. <style lang="scss">
  248. page{
  249. background-color: #FFFFFF;
  250. }
  251. view{
  252. box-sizing: border-box;
  253. }
  254. .bg-blue{
  255. background-color: #59a5f0;
  256. color: #FFFFFF;
  257. }
  258. .data {
  259. background-color: #ffffff;
  260. border-radius: 6rpx;
  261. box-sizing: border-box;
  262. padding:0 20rpx 20rpx;
  263. font-size: 28rpx;
  264. .top {
  265. display: flex;
  266. justify-content: space-between;
  267. padding: 30rpx 0;
  268. border-bottom: 1rpx solid #EEEEEE;
  269. .left {
  270. display: flex;
  271. align-items: center;
  272. .title {
  273. margin: 0 10rpx;
  274. font-size: 30rpx;
  275. }
  276. }
  277. .right{
  278. margin-right: 10rpx;
  279. }
  280. }
  281. .item {
  282. margin: 20rpx 0 20rpx 0;
  283. .content {
  284. // border-bottom: 1rpx dashed #DDDDDD;
  285. padding: 30rpx 0 ;
  286. .call{
  287. width: 36rpx;
  288. height: 36rpx;
  289. margin-left: 40rpx;
  290. margin-top: 20rpx;
  291. }
  292. }
  293. }
  294. .bottom {
  295. display: flex;
  296. margin-top: 30rpx;
  297. justify-content: flex-end;
  298. align-items: center;
  299. }
  300. }
  301. </style>