zkTask.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <template>
  2. <view class="qualitycontrolTask">
  3. <!-- 飞行质控任务 -->
  4. <view class="flightTask">
  5. <uni-card>
  6. <uni-section :title="pageData.taskList.name" type="line">
  7. <template v-slot:right>
  8. <image style="width: 50rpx; height: 50rpx;" :src="showIcon.nowIcon" @click="changeState()"></image>
  9. </template>
  10. </uni-section>
  11. <view class="flightTask_list">
  12. <view class="flightTask_title">
  13. <view class="flightTask_text">被质控代煎企业</view>
  14. <view class="flightTask_righttext">{{pageData.taskList.bzkOrgName}}</view>
  15. </view>
  16. <view class="flightTask_title">
  17. <view class="flightTask_text">组长</view>
  18. <view class="flightTask_righttext">{{pageData.taskList.zzName}}</view>
  19. </view>
  20. <view class="flightTask_title">
  21. <view class="flightTask_text">组员</view>
  22. <view class="flightTask_righttext">{{pageData.taskList.zyNames}}</view>
  23. </view>
  24. <view class="flightTask_title">
  25. <view class="flightTask_text">地址</view>
  26. <view class="flightTask_righttext">{{pageData.taskList.address}}</view>
  27. </view>
  28. <view class="flightTask_title">
  29. <view class="flightTask_text">总数量:</view>
  30. <view class="flightTask_righttext">{{pageData.taskList.totalWcCount+'/'+pageData.taskList.totalCyCount}}</view>
  31. </view>
  32. <view class="flightTask_title">
  33. <view class="flightTask_text">代煎完成数量:</view>
  34. <view class="flightTask_righttext">{{pageData.taskList.djWcCount+'/'+pageData.taskList.djCyCount}}</view>
  35. </view>
  36. <view class="flightTask_title">
  37. <view class="flightTask_text">代配完成数量:</view>
  38. <view class="flightTask_righttext">{{pageData.taskList.dpWcCount+'/'+pageData.taskList.dpCyCount}}</view>
  39. </view>
  40. </view>
  41. </uni-card>
  42. </view>
  43. <!-- 代配作业质控 -->
  44. <view class="dp_or_dj_Task">
  45. <uni-card>
  46. <uni-section title="代配作业质控" type="line">
  47. <template v-slot:right>
  48. <view class="sub_title">不合格数<view class="sub_title_text">{{pageData.detailList.dpbhg}}</view></view>
  49. </template>
  50. </uni-section>
  51. <view>
  52. <button class="button" @click="addTask('dp')"> + 新增</button>
  53. </view>
  54. <uni-table class="dp_table">
  55. <!-- 表头行 -->
  56. <uni-tr>
  57. <uni-th align="center" width="150rpx">处方编号</uni-th>
  58. <uni-th align="center" width="150rpx">贴数(贴)</uni-th>
  59. <uni-th align="center" width="150rpx">平均误差(%)</uni-th>
  60. <uni-th align="center" width="150rpx">操作人</uni-th>
  61. </uni-tr>
  62. <!-- 表格数据行 -->
  63. <uni-tr v-for="(item, index) in pageData.dpList" :key="index">
  64. <uni-td align="center">{{item.cfbh}}</uni-td>
  65. <uni-td align="center">{{item.ts}}</uni-td>
  66. <uni-td align="center">{{item.wc}}</uni-td>
  67. <uni-td align="center">{{item.creatorName}}</uni-td>
  68. </uni-tr>
  69. </uni-table>
  70. <view class="see_more" @click="seeMore('dp')">
  71. <text>查看更多</text>
  72. <uni-icons type="right"></uni-icons>
  73. </view>
  74. </uni-card>
  75. </view>
  76. <!-- 代煎作业质控 -->
  77. <view class="dp_or_dj_Task">
  78. <uni-card>
  79. <uni-section title="代煎作业质控" type="line">
  80. <!-- <template v-slot:right>
  81. <view class="sub_title">不合格数<view class="sub_title_text">{{pageData.detailList.djbhg}}</view></view>
  82. </template> -->
  83. </uni-section>
  84. <view>
  85. <button class="button" @click="addTask('dj')"> + 新增</button>
  86. </view>
  87. <uni-table class="dp_table">
  88. <!-- 表头行 -->
  89. <uni-tr>
  90. <uni-th align="center" width="150rpx">处方编号</uni-th>
  91. <uni-th align="center" width="150rpx">贴数(贴)</uni-th>
  92. <uni-th align="center" width="150rpx">不合格项</uni-th>
  93. <uni-th align="center" width="150rpx">操作人</uni-th>
  94. </uni-tr>
  95. <!-- 表格数据行 -->
  96. <uni-tr v-for="(item, index) in pageData.djList" :key="index">
  97. <uni-td align="center">{{item.cfbh}}</uni-td>
  98. <uni-td align="center">{{item.ts}}</uni-td>
  99. <uni-td align="center">{{item.bhgx}}</uni-td>
  100. <uni-td align="center">{{item.creatorName}}</uni-td>
  101. </uni-tr>
  102. </uni-table>
  103. <view class="see_more" @click="seeMore('dj')">
  104. <text>查看更多</text>
  105. <uni-icons type="right"></uni-icons>
  106. </view>
  107. </uni-card>
  108. </view>
  109. <!-- 代煎企业作业环境质控 -->
  110. <view class="djqyhj_Task">
  111. <uni-card>
  112. <uni-section title="代煎企业作业环境质控" type="line">
  113. <template v-slot:right>
  114. <view class="sub_title">不合格数<view class="sub_title_text">{{pageData.detailList.hjzkbhg}}</view></view>
  115. </template>
  116. </uni-section>
  117. <view class="image_upload">
  118. <uni-file-picker readonly :modelValue="pageData.imageList" file-mediatype="image">
  119. </uni-file-picker>
  120. </view>
  121. <view class="see_more" @click="seeMore('djqyhj')">
  122. <text>新增</text>
  123. <uni-icons type="right"></uni-icons>
  124. </view>
  125. </uni-card>
  126. </view>
  127. <!-- 完成质控 -->
  128. <view class="finish_button" v-if="pageData.finishStatus">
  129. <button class="button" @click="finishTask()">完成质控</button>
  130. </view>
  131. </view>
  132. </template>
  133. <script setup>
  134. import { reactive } from "vue";
  135. import {onLoad,onShow,onUnload,onPullDownRefresh} from "@dcloudio/uni-app";
  136. import http from '@/utils/request';
  137. import {uploadImageModelValue} from '@/pages/controls/image/OssService';
  138. const pageData=reactive({
  139. detailList:{},
  140. // 质控任务
  141. taskList:{},
  142. // 代配
  143. dpList:{},
  144. // 代煎
  145. djList:{},
  146. // 图片列表
  147. imageList:[],
  148. // 质控状态
  149. taskStatus:'',
  150. // 质控完成状态
  151. finishStatus:true,
  152. // 环境质控完成状态
  153. hjzkFinishStatus:''
  154. })
  155. // 显示与隐藏突变
  156. const showIcon=reactive({
  157. nowIcon:'',
  158. showIcon:'/static/blackDisplay.png',
  159. hideIcon:'/static/blackHide.png'
  160. })
  161. // 查询质控作业--根据Id 和 完成质控 入参
  162. const zkzyData=reactive({
  163. id:''
  164. })
  165. // 切换显示状态
  166. const changeState=()=>{
  167. if(showIcon.nowIcon==showIcon.showIcon){
  168. showIcon.nowIcon=showIcon.hideIcon
  169. }else{
  170. showIcon.nowIcon=showIcon.showIcon
  171. }
  172. }
  173. // 新增代配/代煎质控
  174. const addTask=(type)=>{
  175. if(type=='dp'){
  176. // 新增代配
  177. pageData.taskStatus='dp'
  178. }else if(type=='dj'){
  179. // 新增代煎
  180. pageData.taskStatus='dj'
  181. }
  182. uni.navigateTo({
  183. url:'/pages/ypczk/zkTask/choosePrescription?taskStatus='+pageData.taskStatus
  184. })
  185. }
  186. // 查看更多
  187. const seeMore =(type)=>{
  188. let jumpUrl=''
  189. if(type=='dp'){
  190. // 代配跳转
  191. jumpUrl='/pages/ypczk/zkTask/zkTaskDetail/detailsList'
  192. }else if(type=='dj'){
  193. // 代煎跳转
  194. jumpUrl='/pages/ypczk/zkTask/zkTaskDetail/detailsList'
  195. }else if(type=='djqyhj'){
  196. // 环境质控跳转
  197. jumpUrl='/pages/ypczk/zkTask/djhjTask'
  198. }
  199. uni.navigateTo({
  200. url:jumpUrl
  201. })
  202. }
  203. // 完成质控
  204. const finishTask=()=>{
  205. uni.showLoading({
  206. title: '',
  207. mask: true
  208. });
  209. http.get("app-api/zkzy/finish",zkzyData).then(res=>{
  210. uni.hideLoading()
  211. console.log(res)
  212. if(res!=null){
  213. uni.navigateBack({
  214. delta: 1,
  215. success: () => {
  216. uni.$emit("finishTask")
  217. }
  218. });
  219. }
  220. })
  221. }
  222. // 查询质控作业--根据Id
  223. const getZkData=()=>{
  224. uni.showLoading({
  225. title: '',
  226. mask: true
  227. });
  228. http.get("app-api/zkzy/findZkzyById",zkzyData).then(res=>{
  229. uni.hideLoading()
  230. console.log(res)
  231. pageData.detailList=res
  232. pageData.taskList=res.task
  233. pageData.djList=res.djCfDetail.slice(0,3)
  234. pageData.dpList=res.dpCfDetail.slice(0,3)
  235. pageData.hjzkFinishStatus=res.hjzkStatus
  236. pageData.detailList.dpbhg=dpbhgNumber(res.dpCfDetail)
  237. // 获取图片
  238. if(pageData.detailList.hjzkImgUrl!=null && pageData.detailList.hjzkImgUrl!=''){
  239. pageData.imageList=showImage(pageData.detailList.hjzkImgUrl)
  240. }
  241. isfinishAllTask(res.task)
  242. })
  243. }
  244. // 代配不合格数
  245. const dpbhgNumber=(data)=>{
  246. let number=0
  247. data.forEach(item=>{
  248. if (item.cfbhg == 1 || item.mxbhg > 0){
  249. number ++;
  250. }
  251. })
  252. return number
  253. }
  254. // 显示图片
  255. const showImage=(id)=>{
  256. return uploadImageModelValue(id)
  257. }
  258. // 判断当前用户是否为组员(组员为true)
  259. const isZy=()=>{
  260. try{
  261. const value=uni.getStorageSync("userInfo")
  262. if(pageData.taskList.zyIds.indexOf(value.id)!=-1){
  263. return true
  264. }else{
  265. return false
  266. }
  267. }catch(e){
  268. //TODO handle the exception
  269. }
  270. }
  271. // 是否可以完成质控
  272. const isfinishAllTask=(e)=>{
  273. // 总数量、代煎完成数量、代配完成数量不达标
  274. // 是否组员
  275. if(e.djWcCount>=e.djCyCount && e.dpWcCount>=e.dpCyCount && e.totalWcCount>=e.totalCyCount && pageData.hjzkFinishStatus=='2' && !isZy()){
  276. pageData.finishStatus=true
  277. }
  278. else{
  279. pageData.finishStatus=false
  280. }
  281. }
  282. // 存入taskData(taskId)
  283. const setTaskId=()=>{
  284. uni.setStorageSync("saveTaskId",{taskId:zkzyData.id})
  285. }
  286. onLoad((data)=>{
  287. if(data!=null){
  288. zkzyData.id=data.taskId
  289. }
  290. setTaskId()
  291. })
  292. onShow(()=>{
  293. showIcon.nowIcon=showIcon.hideIcon
  294. getZkData()
  295. })
  296. </script>
  297. <style lang="scss" scoped>
  298. @import './index.scss'
  299. </style>