Info.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <template>
  2. <div>
  3. <common @asynCallBack="asynCallBack" :doLoading="true"></common>
  4. <top-header :pageTitle="pageTitle"></top-header>
  5. <div v-if="detail.personName" class="mui-content vongi-qingjiadt margin60">
  6. <div class="vongi-qingjiadt-head flew-sp">
  7. <div class="flew-items">
  8. <div class="flew"><img :src="detail.faceImageUrl" width="50" v-viewer /></div>
  9. <h4>{{detail.personName}} 登记 <span class="color4fc5f7" v-text="detail.typeN"></span></h4>
  10. </div>
  11. <button class="mui-btn mui-btn-primary mui-btn-outlined" :style="getColor(detail)" v-text="detail.remark?'已审查':'未审查'"></button>
  12. </div>
  13. <form class="mui-input-group margin10">
  14. <div class="mui-input-row">
  15. <label>所属部门</label>
  16. <span v-text="detail.companyName"></span>
  17. </div>
  18. <div class="mui-input-row">
  19. <label>外出地点</label>
  20. <span v-text="detail.destination"></span>
  21. </div>
  22. <div class="mui-input-row">
  23. <label>外出事由</label>
  24. <span v-text="detail.content"></span>
  25. </div>
  26. <div class="mui-input-row">
  27. <label>报备</label>
  28. <span v-text="detail.list.length>0?detail.list[0]['name']:''"></span>
  29. </div>
  30. <div class="mui-input-row">
  31. <label>提交时间</label>
  32. <span v-text="detail.createTime"></span>
  33. </div>
  34. <div class="mui-input-row">
  35. <label>申请单编号</label>
  36. <span v-text="detail.approvalNo"></span>
  37. </div>
  38. </form>
  39. <form class="mui-input-group margin10">
  40. <div class="mui-input-row">
  41. <label>预计外出时间</label>
  42. <span v-text="detail.startTime"></span>
  43. </div>
  44. <div class="mui-input-row">
  45. <label>预估时长</label>
  46. <span v-text="detail.estimatedTime+'小时'"></span>
  47. </div>
  48. <div v-if="detail.endTime" class="mui-input-row">
  49. <label>返回时间</label>
  50. <span v-text="detail.endTime"></span>
  51. </div>
  52. <div v-if="detail.remark" class="mui-input-row">
  53. <label>审查意见</label>
  54. <span v-text="detail.remark"></span>
  55. </div>
  56. <div v-if="detail.workReport" class="mui-input-row">
  57. <label>办理结果</label>
  58. <span v-text="detail.workReport"></span>
  59. </div>
  60. </form>
  61. <!-- <div class="mui-content-padded">
  62. <h5>审核记录</h5>
  63. </div>
  64. <form class="mui-input-group margin10">
  65. <template v-for="(item,index) in detail.list">
  66. <div class="mui-input-row">
  67. <label>通知人</label>
  68. <span v-text="item.name"></span>
  69. </div>
  70. <div v-if="item.approvalContent" class="mui-input-row">
  71. <label>审核意见</label>
  72. <span v-text="item.approvalContent"></span>
  73. </div>
  74. <div v-if="item.time" class="mui-input-row">
  75. <label>审核时间</label>
  76. <span v-text="item.time"></span>
  77. </div>
  78. </template>
  79. </form> -->
  80. </div>
  81. <div v-if="wm && !detail.endTime" class="fyy-footer">
  82. <div class="bindfyy-btn"><button type="button" @click="openCloseFromVisible=true" class="mui-btn mui-btn-danger">结束外出</button></div>
  83. </div>
  84. <!-- 审批弹窗 -->
  85. <div v-show="openCloseFromVisible" class="mui-popup mui-popup-in vongi-mui-pop">
  86. <div class="mui-popup-inner vongi-pop-inner">
  87. <div class="mui-popup-title">填写外出事项办理情况</div>
  88. <div class="mui-popup-input">
  89. <textarea v-model="closeFrom.workReport" rows="3" placeholder="请输入"></textarea>
  90. </div>
  91. </div>
  92. <div class="mui-popup-buttons"><span class="mui-popup-button mui-popup-button-bold" @click="closeActoin">提交</span></div>
  93. </div>
  94. <div v-show="openCloseFromVisible" @click="openCloseFromVisible=false" class="mui-popup-backdrop mui-active"></div>
  95. <div v-if="can_remark" class="fyy-scon-botton" style="position: fixed;width: 100%;bottom: 0;">
  96. <div style="background-color: #3385FF;" class="examine-btn examine-btn1-blue" @click="openFromVisible=true">填写意见</div>
  97. </div>
  98. <!-- 审批弹窗 -->
  99. <div v-show="openFromVisible" class="mui-popup mui-popup-in vongi-mui-pop">
  100. <div class="mui-popup-inner vongi-pop-inner">
  101. <div class="mui-popup-title">填写意见</div>
  102. <div class="mui-popup-input">
  103. <textarea v-model="remarkForm.remark" rows="3" placeholder="请输入"></textarea>
  104. </div>
  105. </div>
  106. <div class="mui-popup-buttons"><span class="mui-popup-button mui-popup-button-bold" @click="addRemark">提交</span></div>
  107. </div>
  108. <div v-show="openFromVisible" @click="openFromVisible=false" class="mui-popup-backdrop mui-active"></div>
  109. <loading :visible="isLoading"></loading>
  110. </div>
  111. </template>
  112. <script>
  113. import * as API_BusinessTravel from '@/apis/Master/business_travel'
  114. import Common from '$project/components/Common.vue'
  115. import Loading from '$project/components/Loading.vue'
  116. import TopHeader from '$project/components/TopHeader.vue'
  117. import {
  118. mapGetters,
  119. mapMutations
  120. } from 'vuex'
  121. export default {
  122. name: 'MasterEgressInfo',
  123. components: {
  124. Common,
  125. Loading,
  126. TopHeader,
  127. },
  128. data() {
  129. return {
  130. pageTitle: '外出登记详情',
  131. isLoading: false,
  132. id: this.$route.query.id,
  133. detail: {
  134. list: [],
  135. },
  136. //微信模板消息过来的
  137. wm: this.$route.query.wm,
  138. can_remark: this.$route.query.remark,
  139. remarkForm: {
  140. id: this.$route.query.id,
  141. remark: ''
  142. },
  143. openFromVisible: false,
  144. openCloseFromVisible: false,
  145. closeFrom: {
  146. id: this.$route.query.id,
  147. workReport: '',
  148. }
  149. }
  150. },
  151. created() {},
  152. methods: {
  153. //获取详情
  154. getInfo() {
  155. this.isLoading = true;
  156. API_BusinessTravel.businessOutDetail(this.id).then(response => {
  157. this.isLoading = false;
  158. this.detail = response;
  159. }).catch(error => {
  160. this.isLoading = false;
  161. mui.toast(error);
  162. })
  163. },
  164. //获取状态颜色
  165. getColor(item) {
  166. var color = '';
  167. if (item.remark) {
  168. color = '#55f868';
  169. } else {
  170. color = '#4fc5f7';
  171. }
  172. return 'color:' + color + ';border-color:' + color + ';';
  173. },
  174. //结束状态
  175. closeActoin() {
  176. this.openCloseFromVisible = false;
  177. var _this = this;
  178. var btnArray = ['否', '是'];
  179. mui.confirm('是否立即结束外出?', '确认', btnArray, function(e) {
  180. if (e.index == 1) {
  181. _this.outEnd();
  182. } else {
  183. _this.openCloseFromVisible = true;
  184. }
  185. })
  186. },
  187. //结束状态
  188. outEnd() {
  189. this.isLoading = true;
  190. API_BusinessTravel.businessOutEnd(this.closeFrom).then(response => {
  191. this.isLoading = false;
  192. mui.toast('处理成功');
  193. this.getInfo();
  194. }).catch(error => {
  195. this.isLoading = false;
  196. mui.toast(error);
  197. })
  198. },
  199. //领导添加备注
  200. addRemark() {
  201. if (!this.remarkForm.remark) {
  202. mui.toast('请填写意见');
  203. } else {
  204. this.isLoading = true;
  205. API_BusinessTravel.addRemark(this.remarkForm).then(response => {
  206. this.isLoading = false;
  207. this.openFromVisible = false;
  208. mui.toast('提交成功');
  209. this.getInfo();
  210. }).catch(error => {
  211. this.isLoading = false;
  212. mui.toast(error);
  213. })
  214. }
  215. },
  216. asynCallBack() {
  217. //获取详情
  218. this.getInfo();
  219. },
  220. },
  221. mounted() {
  222. },
  223. destroyed() {},
  224. computed: {
  225. ...mapGetters({
  226. openId: 'wx_openid',
  227. token: 'token',
  228. })
  229. },
  230. }
  231. </script>
  232. <style scoped src="$project/assets/css/xpwyfyy.css"></style>
  233. <style src="$project/assets/css/iconfont.css"></style>
  234. <style scoped>
  235. .status_r {
  236. color: #fe616c !important;
  237. border: 1px solid #fe616c !important;
  238. }
  239. .status_a {
  240. color: #05c8af !important;
  241. border: 1px solid #05c8af !important;
  242. }
  243. </style>