移动端
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

414 строки
15 KiB

  1. <template>
  2. <div class="app-container">
  3. <div style="width: 100%;color:#fff;padding:15px 0;background: linear-gradient(134deg,#7ac943 1%, #22b7f2);">
  4. <div style="width: 95%;margin: 0 auto;display: flex;align-items: center;">
  5. <van-image
  6. width="60"
  7. height="60"
  8. round
  9. src="https://img.yzcdn.cn/vant/leaf.jpg"
  10. />
  11. <div style="margin-left: 15px;">
  12. <p style="font-size: 16px;" v-if="businessLevel=='1'">调查员·采集员</p>
  13. <p style="font-size: 16px;" v-if="businessLevel=='2'">审核员</p>
  14. <p style="margin-top: 10px;font-size: 16px;">{{nickName}}</p>
  15. </div>
  16. <van-icon name="setting-o" style="margin-left: auto;" @click="gotoLink" size="25"/>
  17. </div>
  18. </div>
  19. <div style="background:#F5F5F5;width: 95%;margin: 20px auto 0;border-radius: 15px;overflow: hidden;">
  20. <van-grid :column-num="3" :border="false">
  21. <van-grid-item>
  22. <van-badge :content="total">
  23. <img
  24. width="50"
  25. height="50"
  26. :src="require('../../assets/images/housesteadSurvey/task1.png')"
  27. @click="active=1,getList()"
  28. />
  29. </van-badge>
  30. <p id="basetext" :style="{color:(active==1?'#7AC943':'#000'),fontSize:'14px',marginTop:'5px'}">全部任务</p>
  31. </van-grid-item>
  32. <van-grid-item>
  33. <van-badge :content="done">
  34. <img
  35. width="50"
  36. height="50"
  37. :src="require('../../assets/images/housesteadSurvey/task2.png')"
  38. @click="active=2,getList()"
  39. />
  40. </van-badge>
  41. <p :style="{color:(active==2?'#7AC943':'#000'),fontSize:'14px',marginTop:'5px'}">已完成</p>
  42. </van-grid-item>
  43. <van-grid-item>
  44. <van-badge :content="todo">
  45. <img
  46. width="50"
  47. height="50"
  48. :src="require('../../assets/images/housesteadSurvey/task3.png')"
  49. @click="active=3,getList()"
  50. />
  51. </van-badge>
  52. <p :style="{color:(active==3?'#7AC943':'#000'),fontSize:'14px',marginTop:'5px'}">待调查</p>
  53. </van-grid-item>
  54. </van-grid>
  55. </div>
  56. <div style="margin:20px;">
  57. <p class="title" style="position:relative;padding-left:10px;line-height:20px;font-size: 16px;">任务列表</p>
  58. </div>
  59. <div v-if="active==1" style="height:calc( 100vh - 350px);overflow-y:auto;">
  60. <van-pull-refresh v-model="isLoadingtask" @refresh="onRefreshtask" :immediate-check="false">
  61. <van-cell v-for="(item,index) in totalList" :key="item.id" size="small" @click.native="setCookies(item)" style="border-radius: 16px;
  62. box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.16); width:95%;margin:0px auto 20px;height: 110px;">
  63. <template #title>
  64. <div>{{item.deptName}}</div>
  65. </template>
  66. <template #default>
  67. <p :style="{'color':chooseColor(item),'background':chooseColor2(item),'display':'inline-block','padding':'4px 2px','line-height':'1','border-radius':'5px'}">
  68. {{item.confirmZjdzdNumber}}/{{item.reportZjdzdNumber}}
  69. </p>
  70. <van-circle
  71. v-model="item.reportZrzNumber"
  72. :rate="item.reportNhNumber"
  73. :stroke-width="100"
  74. :speed="100"
  75. size="70%"
  76. layer-color="#ebedf0"
  77. :color="chooseColor(item)"
  78. :text="item.reportZjdzdNumber!=null?(((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed())+'%':0+'%'"
  79. />
  80. </template>
  81. <template #label>
  82. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="clock" color="#22b7f2" style="margin-right:5px;"/>{{item.jhkssj}}~{{item.jhjssj}}</p>
  83. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="manager" color="#22b7f2" style="margin-right:5px;"/>{{item.rwzxr}}</p>
  84. </template>
  85. </van-cell>
  86. </van-pull-refresh>
  87. </div>
  88. <div v-if="active==2" style="height:calc( 100vh - 350px);overflow-y:auto;">
  89. <van-pull-refresh v-model="isLoadingtask" @refresh="onRefreshtask">
  90. <van-cell v-for="(item,index) in doneList" :key="item.id" size="small" @click.native="setCookies(item)" style="border-radius: 16px;
  91. box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.16); width:95%;margin:0px auto 20px;height: 110px;">
  92. <template #title>
  93. <div>{{item.deptName}}</div>
  94. </template>
  95. <template #default>
  96. <p :style="{'color':chooseColor(item),'background':chooseColor2(item),'display':'inline-block','padding':'4px 2px','line-height':'1','border-radius':'5px'}">
  97. {{item.confirmZjdzdNumber}}/{{item.reportZjdzdNumber}}
  98. </p>
  99. <van-circle
  100. v-model="item.reportZrzNumber"
  101. :rate="item.reportNhNumber"
  102. :stroke-width="100"
  103. :speed="100"
  104. size="70%"
  105. layer-color="#ebedf0"
  106. :color="chooseColor(item)"
  107. :text="item.reportZjdzdNumber!=null?(((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed())+'%':0+'%'"
  108. />
  109. </template>
  110. <template #label>
  111. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="clock" color="#22b7f2" style="margin-right:5px;"/>{{item.jhkssj}}~{{item.jhjssj}}</p>
  112. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="manager" color="#22b7f2" style="margin-right:5px;"/>{{item.rwzxr}}</p>
  113. </template>
  114. </van-cell>
  115. </van-pull-refresh>
  116. </div>
  117. <div v-if="active==3" style="height:calc( 100vh - 350px);overflow-y:auto;">
  118. <van-pull-refresh v-model="isLoadingtask" @refresh="onRefreshtask">
  119. <van-cell v-for="(item,index) in todoList" :key="item.id" size="small" @click.native="setCookies(item)" style="border-radius: 16px;
  120. box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.16); width:95%;margin:0px auto 20px;height: 110px;">
  121. <template #title>
  122. <div>{{item.deptName}}</div>
  123. </template>
  124. <template #default>
  125. <p :style="{'color':chooseColor(item),'background':chooseColor2(item),'display':'inline-block','padding':'4px 2px','line-height':'1','border-radius':'5px'}">
  126. {{item.confirmZjdzdNumber}}/{{item.reportZjdzdNumber}}
  127. </p>
  128. <van-circle
  129. v-model="item.reportZrzNumber"
  130. :rate="item.reportNhNumber"
  131. :stroke-width="100"
  132. :speed="100"
  133. size="70%"
  134. layer-color="#ebedf0"
  135. :color="chooseColor(item)"
  136. :text="item.reportZjdzdNumber!=null?(((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed())+'%':0+'%'"
  137. />
  138. </template>
  139. <template #label>
  140. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="clock" color="#22b7f2" style="margin-right:5px;"/>{{item.jhkssj}}~{{item.jhjssj}}</p>
  141. <p style="display: flex;align-items: center;margin-top: 5px;"><van-icon name="manager" color="#22b7f2" style="margin-right:5px;"/>{{item.rwzxr}}</p>
  142. </template>
  143. </van-cell>
  144. </van-pull-refresh>
  145. </div>
  146. </div>
  147. </template>
  148. <script>
  149. import {addTask, complete, delTask, exportTask, getTask, listTask, publish, updateTask, userList} from "@/api/homesteadSurvey/index";
  150. import {getInfo} from "../../api/login";
  151. import CircleProccess from "@/components/circleProccess.vue";
  152. import {updateUserPwd} from "../../api/onlineHome/my";
  153. import {Dialog} from "vant";
  154. import {sysConfig} from "../../api/homesteadSurvey";
  155. import axios from "axios";
  156. export default {
  157. name: "homesteadIndex",
  158. components: {
  159. CircleProccess
  160. },
  161. data() {
  162. return {
  163. currentRate1:0,
  164. currentRate2:0,
  165. currentRate3:0,
  166. active: 1,
  167. show: false,
  168. loading: false,
  169. finished: false,
  170. height:200,
  171. phone:null,
  172. activeKey:0,
  173. currentRate: 0,
  174. total:0,
  175. totalList:[],
  176. done:0,
  177. doneList:[],
  178. todo:0,
  179. todoList:[],
  180. gradientColor:{
  181. },
  182. // 查询参数
  183. queryParams: {
  184. rwwczt: null,
  185. rwfbzt:"PUBLISHED",
  186. taskExecutor:null
  187. },
  188. nickName:"",
  189. text:0,
  190. isLoadingtask:false,
  191. countqb:0,
  192. countyhc:0,
  193. countwhc:0,
  194. //宅调人员列表
  195. taskExecutortions:[],
  196. //当前用户级别
  197. businessLevel:1,
  198. // 字典列表json
  199. dictTypeList:null,
  200. };
  201. },
  202. created(){
  203. userList().then(response => {
  204. this.taskExecutortions = response.data
  205. })
  206. getInfo().then(response => {
  207. this.nickName = response.user.nickName
  208. this.businessLevel = response.user.businessLevel
  209. this.$cookies.set("businessLevel",this.businessLevel)
  210. this.queryParams.taskExecutor = response.user.userName
  211. this.getList();
  212. });
  213. axios.get('../static/dictyType.json').then(res => {
  214. this.dictTypeList = res.data
  215. })
  216. },
  217. mounted(){
  218. // 监听屏幕方向
  219. let self = this;
  220. window.addEventListener(
  221. "onorientationchange" in window ? "orientationchange" : "resize",
  222. function() {
  223. if (window.orientation === 90 || window.orientation === -90) {
  224. // 横屏
  225. }
  226. },
  227. false
  228. );
  229. if(this.$cookies.get("url")==null||this.$cookies.get("url")==""){
  230. this.getBaseUrl()
  231. }
  232. },
  233. methods: {
  234. getBaseUrl(){
  235. let params={
  236. configKey: "system.attachment.url"}
  237. sysConfig(params).then(response => {
  238. this.$cookies.set("url",response.rows[0].configValue)
  239. })
  240. },
  241. chooseValue(item){
  242. let a = ((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed()
  243. return a
  244. },
  245. chooseColor(item){
  246. let a = ((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed()
  247. if(a < 50){
  248. return '#FA5353'
  249. }else if(a < 100){
  250. return '#22B7F2'
  251. }else{
  252. return '#85d824'
  253. }
  254. return '#FA5353'
  255. },
  256. chooseColor2(item){
  257. let a = ((item.confirmZjdzdNumber/item.reportZjdzdNumber)*100).toFixed()
  258. if(a < 50){
  259. return 'rgba(250,83,83,0.22)'
  260. }else if(a < 100){
  261. return 'rgba(34,183,242,0.22)'
  262. }else{
  263. return 'rgba(122,201,67,0.22)'
  264. }
  265. return '#FA5353'
  266. },
  267. taskExecutorChange(row){
  268. if(row.taskExecutor!=null&&row.taskExecutor!=""&&row.taskExecutor.length>1){
  269. var actions = [];
  270. row.taskExecutor.map(res => {
  271. for(let i = 0;i<this.taskExecutortions.length;i++){
  272. if(res == this.taskExecutortions[i].userName){
  273. actions.push(this.taskExecutortions[i].nickName)
  274. }
  275. }
  276. })
  277. return actions.join(',');
  278. }else{
  279. var actions = [];
  280. Object.keys(this.taskExecutortions).some((key) => {
  281. if (this.taskExecutortions[key].userName == ('' + row.taskExecutor)) {
  282. actions.push(this.taskExecutortions[key].nickName);
  283. return true;
  284. }
  285. })
  286. return actions.join(',');
  287. }
  288. },
  289. onRefreshtask(){
  290. this.isLoadingtask = false;
  291. let _this = this
  292. if(this.active==1){
  293. let params = {
  294. "rwwczt": "FINISHED",
  295. "rwfbzt":"PUBLISHED",
  296. "pageNum": this.countyhc+1,
  297. "pageSize":10,
  298. }
  299. listTask(params).then((response) => {
  300. if(response.rows.length>0&&this.doneList.length<response.total){
  301. response.rows.map(res => {
  302. this.doneList.unshift(res)
  303. })
  304. this.countyhc++
  305. }
  306. });
  307. }else if(this.active==2){
  308. let params = {
  309. "rwwczt": "UNFINISHED",
  310. "rwfbzt":"PUBLISHED",
  311. "pageNum": this.countwhc+1,
  312. "pageSize":10,
  313. }
  314. listTask(params).then((response) => {
  315. if(response.rows.lenght>0&&this.todoList.length<response.total){
  316. response.rows.map(res => {
  317. this.todoList.unshift(res)
  318. })
  319. this.countwhc++
  320. }
  321. });
  322. }else{
  323. let params = {
  324. "rwfbzt":"PUBLISHED",
  325. "pageNum": this.countqb+1,
  326. "pageSize":10,
  327. }
  328. listTask(params).then((response) => {
  329. if(response.rows.length>0&&this.totalList.length<response.total){
  330. response.rows.map(res => {
  331. this.totalList.unshift(res)
  332. })
  333. this.countqb++
  334. }
  335. });
  336. }
  337. },
  338. setCookies(item){
  339. /* if(this.$cookies.get("upload")==null||this.$cookies.get("upload")==0){
  340. Dialog.confirm({
  341. title: '提示',
  342. message: '当前未选择批量上传,可能会由于网络原因上传图片缓慢,是否继续?',
  343. })
  344. .then(() => {
  345. // on confirm
  346. this.$router.push({name:'homesteadList'})
  347. this.$cookies.set("item",JSON.stringify(item));
  348. })
  349. .catch(() => {
  350. // on cancel
  351. });
  352. }else{
  353. this.$router.push({name:'homesteadList'})
  354. this.$cookies.set("item",JSON.stringify(item));
  355. }*/
  356. this.$cookies.set("item","");
  357. this.$cookies.set("item",JSON.stringify(item));
  358. this.$router.push({name:'homesteadList'})
  359. },
  360. getList() {
  361. this.totalList = []
  362. this.doneList = [];
  363. this.todoList = [];
  364. listTask(this.queryParams).then(response => {
  365. this.total = response.total
  366. this.done = 0;
  367. this.todo = 0;
  368. response.rows.map(res => {
  369. if(res.taskStatus == "FINISHED"){
  370. this.done+=1
  371. this.doneList.push(res);
  372. }else{
  373. this.todo+=1
  374. this.todoList.push(res);
  375. }
  376. if(res.taskExecutor!=null&&res.taskExecutor!=''){
  377. res.taskExecutor = res.taskExecutor.split(',')
  378. }
  379. })
  380. this.totalList = response.rows
  381. });
  382. },
  383. gotoLink(){
  384. this.$router.push('/homesteadSurvey/settle')
  385. },
  386. },
  387. }
  388. </script>
  389. <style scoped>
  390. >>> .van-cell__title{
  391. flex:3
  392. }
  393. >>> .sss {
  394. display: flex;
  395. }
  396. >>> .title:before
  397. {
  398. content:"";
  399. width: 6px;
  400. height: 20PX;
  401. background: #7ac943;
  402. border-radius: 3px;
  403. position:absolute;
  404. left:0;
  405. bottom:0;
  406. }
  407. </style>