index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <template>
  2. <div>
  3. <NavBar />
  4. <van-row>
  5. <van-col span="24"
  6. ><van-field v-model="value1" is-link readonly label="机构" placeholder="" @click="show = true" />
  7. <van-popup v-model="show" round position="bottom" :close-on-click-overlay="false">
  8. <van-cascader
  9. v-model="cascaderValue"
  10. title="组织机构"
  11. :options="options"
  12. @close="closeDialog"
  13. @change="changeCascader"
  14. @finish="onFinish"
  15. :field-names="fieldNames"
  16. />
  17. </van-popup>
  18. </van-col>
  19. </van-row>
  20. <van-row>
  21. <van-col span="12"
  22. ><van-field v-model="fieldValue" is-link readonly label="状态" placeholder="" @click="showStatus = true" />
  23. <van-popup v-model="showStatus" round position="bottom">
  24. <van-picker
  25. title="调阅状态"
  26. show-toolbar
  27. :columns="columns"
  28. @confirm="onConfirm"
  29. @cancel="onCancel"
  30. @change="onChange"
  31. :close-on-click-overlay="false"
  32. /> </van-popup
  33. ></van-col>
  34. <van-col span="12">
  35. <van-field v-model="currentDate" is-link readonly label="月份" placeholder="" @click="showDate = true" />
  36. <van-popup v-model="showDate" round position="bottom">
  37. <van-datetime-picker v-model="currentDate" type="year-month" title="月份" />
  38. </van-popup>
  39. </van-col>
  40. </van-row>
  41. <!-- 调阅列表 -->
  42. <div class="topBox" @click="endMonitorHandler(item.status,item.id)" v-for="item in taskList" :key="item.id">
  43. <div class="sonLeftBox">
  44. <!-- 待调阅按钮 -->
  45. <p>
  46. <span :class="monitor[item.status]">{{ item.status | statusFilter }}</span>
  47. </p>
  48. <h3 class="title">{{ item.taskName }}</h3>
  49. <p class="time">开始时间:{{ item.planStartTime }}</p>
  50. <p class="time">结束时间:{{ item.planEndTime }}</p>
  51. </div>
  52. <div class="startMonitor" v-if="item.status == 0" @click="startMonitorHandler(item.id)">开始调阅</div>
  53. <div class="endMonitor" v-else @click="lookInfoHandler(item.id)"><van-icon name="arrow" /></div>
  54. </div>
  55. <!-- 扫描弹框 -->
  56. <van-dialog v-model="showDialog" title="" width="" :showConfirmButton="false">
  57. <span class="spanimg">
  58. <img class="close" @click="showDialog = false" src="../../../assets/img/icon/u58.png" alt="" />
  59. </span>
  60. <p class="text">用手机背面贴近NFC标签完成扫描</p>
  61. <div class="img_box">
  62. <img class="img" src="../../../assets/img/NFCphone.png" />
  63. </div>
  64. <div class="btns">
  65. <div class="nfcPhoto" @click="nfcHandler">
  66. <img class="nfcPng" src="../../../assets/img/icon/NFC扫描-01.png" alt="" />
  67. <div>扫NFC</div>
  68. </div>
  69. <div class="nfcPhoto" @click="photoHandler">
  70. <img class="nfcPng" src="../../../assets/img/icon/camera.png" alt="" />
  71. <div>拍照</div>
  72. </div>
  73. </div>
  74. </van-dialog>
  75. </div>
  76. </template>
  77. <script>
  78. import NavBar from '@/components/NavBar'
  79. import { Col, Row, Cascader, Dialog, DatetimePicker, Icon, Picker } from 'vant'
  80. import { deptTreeList, selectListApp, registration } from '@/api/toConsult.js'
  81. import { Toast } from 'vant'
  82. export default {
  83. data() {
  84. return {
  85. fieldValue: '',
  86. monitor: ['monitor','aaaa','bbb','ccc'], //状态样式
  87. value1: '', //输入框model
  88. currentDate: '',
  89. cascaderValue: '',
  90. columns: ['调阅中', '待调阅', '已调阅'],
  91. show: false,
  92. showStatus: false,
  93. showDate: false,
  94. showDialog: false,
  95. fieldNames: {
  96. text: 'name',
  97. value: 'id',
  98. children: 'children'
  99. },
  100. taskId:'',//当前点击所属任务ID
  101. taskList: [], //任务数组集合
  102. options: [] //机构数组
  103. }
  104. },
  105. components: {
  106. NavBar,
  107. Dialog,
  108. Icon,
  109. DatetimePicker,
  110. Picker,
  111. Col,
  112. Row,
  113. Cascader
  114. },
  115. filters: {
  116. statusFilter: function (value) {
  117. let str = ''
  118. // 0待调阅,1调阅中,2已调阅,3已超期
  119. switch (value) {
  120. case 0:
  121. str = '待调阅'
  122. break
  123. case 1:
  124. str = '调阅中'
  125. break
  126. case 2:
  127. str = '已调阅'
  128. break
  129. case 3:
  130. str = '已超期'
  131. break
  132. }
  133. return str
  134. }
  135. },
  136. created() {
  137. this.init()
  138. },
  139. methods: {
  140. //初始化
  141. init() {
  142. //获取组织机构数据
  143. deptTreeList().then(res => {
  144. let { code, data, msg } = res
  145. if (code == 200) {
  146. this.options = data
  147. }
  148. })
  149. //获取任务列表
  150. selectListApp().then(res => {
  151. let { code, data, msg } = res
  152. if (code == 200) {
  153. this.taskList = data
  154. }
  155. })
  156. },
  157. //扫描NFC
  158. nfcHandler() {
  159. //NFC和图片对应字段先写死后期接入app之后再做更改
  160. let obj = {
  161. nfc: 'nfc',
  162. taskId: this.taskId
  163. }
  164. registration(obj).then(res => {
  165. let { code, data, msg } = res
  166. if (code == 200) {
  167. Toast.success('扫描成功')
  168. this.$router.push('/consultInfo/'+this.taskId)
  169. }
  170. })
  171. },
  172. //扫描图片
  173. photoHandler() {
  174. let obj = {
  175. picture: 'picture',
  176. taskId: this.taskId
  177. }
  178. registration(obj).then(res => {
  179. let { code, data, msg } = res
  180. if (code == 200) {
  181. Toast.success('扫描成功')
  182. this.$router.push('/consultInfo/'+this.taskId)
  183. }
  184. })
  185. },
  186. //关闭弹框事件
  187. closeDialog() {
  188. this.show = false
  189. this.value1 = this.fieldValue
  190. },
  191. // 开始调阅事件
  192. startMonitorHandler(taskId) {
  193. this.taskId=taskId
  194. this.showDialog = true
  195. },
  196. //已调阅事件
  197. endMonitorHandler(status,taskId) {
  198. // 0待调阅,1调阅中,2已调阅,3已超期
  199. //跳转详情
  200. if (status <= 1) return
  201. this.$router.push('/consultInfo/'+taskId)
  202. },
  203. //查看调阅详情
  204. lookInfoHandler(taskId) {
  205. this.taskId=taskId
  206. this.$router.push('/consultInfo/'+taskId)
  207. },
  208. //级联选择当前任意层级触发
  209. changeCascader(val) {
  210. console.log(val)
  211. let { selectedOptions } = val
  212. //级联值
  213. this.cascaderValue = selectedOptions[selectedOptions.length - 1].id
  214. //输入框值
  215. this.fieldValue = selectedOptions[selectedOptions.length - 1].name
  216. },
  217. onFinish() {},
  218. //搜索选择状态时触发
  219. onConfirm(value, index) {
  220. console.log(value)
  221. },
  222. onChange(picker, value, index) {},
  223. onCancel() {}
  224. }
  225. }
  226. </script>
  227. <style lang="scss" scoped>
  228. .topBox {
  229. border: 1px solid #ccc;
  230. margin: 20px;
  231. display: flex;
  232. .sonLeftBox {
  233. padding: 10px;
  234. flex: 1;
  235. background-color: #e6ebeb;
  236. }
  237. }
  238. .monitor {
  239. color: white;
  240. padding: 10px;
  241. border-radius: 10px;
  242. background-color: #8cb585;
  243. }
  244. .title {
  245. margin: 10px;
  246. margin-left: 0px;
  247. font-size: 40px;
  248. }
  249. .time {
  250. font-size: 32px;
  251. }
  252. .startMonitor {
  253. background-color: #87b2be;
  254. color: white;
  255. width: 160px;
  256. line-height: 200px;
  257. font-size: 36px;
  258. text-align: center;
  259. }
  260. .endMonitor {
  261. background-color: #e6ebeb;
  262. color: #87b2be;
  263. width: 160px;
  264. line-height: 200px;
  265. font-size: 36px;
  266. text-align: center;
  267. }
  268. .img_box {
  269. text-align: center;
  270. .img {
  271. width: 200px;
  272. height: 200px;
  273. }
  274. }
  275. .text {
  276. text-align: center;
  277. font-size: 30px;
  278. margin-top: 30px;
  279. margin-bottom: 100px;
  280. }
  281. .btns {
  282. margin-top: 40px;
  283. margin-bottom: 40px;
  284. display: flex;
  285. justify-content: space-around;
  286. .nfcPhoto {
  287. color: #409bf2;
  288. div {
  289. width: 100%;
  290. text-align: center;
  291. }
  292. }
  293. }
  294. .van-dialog {
  295. padding: 30px;
  296. }
  297. .spanimg {
  298. display: flex;
  299. justify-content: end;
  300. .close {
  301. width: 50px;
  302. height: 50px;
  303. }
  304. }
  305. </style>