my.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. <template>
  2. <div class="bgColor">
  3. <div class="head">
  4. <!-- <div class="img"></div> -->
  5. <div class="name">{{ loginUser.name }}</div>
  6. </div>
  7. <div class="myMessage">
  8. <div class="label">个人信息</div>
  9. <ul>
  10. <li>
  11. <div>姓名</div>
  12. <div>{{ loginUser.name }}</div>
  13. </li>
  14. <li v-if="repairMain.valueconfig == 2">
  15. <div>科室名称</div>
  16. <div>{{ loginUser.dept ? loginUser.dept.dept : "暂无" }}</div>
  17. </li>
  18. <li>
  19. <div>工号</div>
  20. <div>{{ loginUser.account }}</div>
  21. </li>
  22. <li>
  23. <div>联系电话</div>
  24. <div v-if="repairMain.valueconfig == 1">
  25. <a :href="'tel:' + loginUser.mphone"><i class="iconfont icon-shouji"></i>{{ loginUser.mphone }}</a>
  26. </div>
  27. <div v-if="repairMain.valueconfig != 1 && loginUser.dept">
  28. <a :href="'tel:' + loginUser.dept.phone"><i class="iconfont icon-shouji"></i>{{
  29. loginUser.dept.phone
  30. }}</a>
  31. </div>
  32. <div v-if="repairMain.valueconfig != 1 && !loginUser.dept">暂无</div>
  33. </li>
  34. <li class="myArea">
  35. <div>问题地点</div>
  36. <div>
  37. <cube-button @click="showCascadePicker">
  38. {{ areaData || "暂无" }}
  39. </cube-button>
  40. <i class="iconfont icon-moren"></i>
  41. </div>
  42. </li>
  43. <li>
  44. <div>详细地址</div>
  45. <div class="factionAdd" @click="toModify('houseNumber')">
  46. <span>{{ loginUser.houseNumber || "暂无" }}</span>
  47. <i class="iconfont icon-moren"></i>
  48. </div>
  49. </li>
  50. </ul>
  51. </div>
  52. <div class="myRapir">
  53. <div class="label">申请列表</div>
  54. <div class="tit">
  55. <div>申请列表</div>
  56. <div @click="toIncidentList()">
  57. {{ incidentStateData.resultCount }}条&nbsp;&nbsp;&nbsp;>
  58. </div>
  59. </div>
  60. <div class="rapirMessage">
  61. <div class="status" @click="toIncidentList(1592)">
  62. <div>
  63. <svg class="icon" aria-hidden="true">
  64. <use xlink:href="#icon-daishouli" />
  65. </svg>
  66. </div>
  67. <div>
  68. <span>未受理</span>
  69. <span>{{
  70. incidentStateData.notAcc > 99 ? 99 : incidentStateData.notAcc
  71. }}</span>
  72. </div>
  73. </div>
  74. <div class="status" @click="toIncidentList(1593)">
  75. <div>
  76. <svg class="icon" aria-hidden="true">
  77. <use xlink:href="#icon-bushouli" />
  78. </svg>
  79. </div>
  80. <div>
  81. <span>不受理</span>
  82. <span>{{
  83. incidentStateData.noAcc > 99 ? 99 : incidentStateData.noAcc
  84. }}</span>
  85. </div>
  86. </div>
  87. <div class="status" @click="toIncidentList(1594)">
  88. <div>
  89. <svg class="icon" aria-hidden="true">
  90. <use xlink:href="#icon-chulizhong" />
  91. </svg>
  92. </div>
  93. <div>
  94. <span>处理中</span>
  95. <span>{{
  96. incidentStateData.processing > 99
  97. ? 99
  98. : incidentStateData.processing
  99. }}</span>
  100. </div>
  101. </div>
  102. <div class="status" @click="toIncidentList(1595)">
  103. <div>
  104. <svg class="icon" aria-hidden="true">
  105. <use xlink:href="#icon-daipingjia" />
  106. </svg>
  107. </div>
  108. <div>
  109. <span>待评价</span>
  110. <span>{{
  111. incidentStateData.evaluated > 99
  112. ? 99
  113. : incidentStateData.evaluated
  114. }}</span>
  115. </div>
  116. </div>
  117. <div class="status" @click="toIncidentList(1596)">
  118. <div>
  119. <svg class="icon" aria-hidden="true">
  120. <use xlink:href="#icon-yijiejue" />
  121. </svg>
  122. </div>
  123. <div>
  124. <span>已解决</span>
  125. <span>{{
  126. incidentStateData.solve > 99 ? 99 : incidentStateData.solve
  127. }}</span>
  128. </div>
  129. </div>
  130. <div class="status" @click="toIncidentList(1597)">
  131. <div>
  132. <svg class="icon" aria-hidden="true">
  133. <use xlink:href="#icon-yichehui" />
  134. </svg>
  135. </div>
  136. <div>
  137. <span>已撤回</span>
  138. <span>{{
  139. incidentStateData.retract > 99 ? 99 : incidentStateData.retract
  140. }}</span>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. <promp-ting
  146. :conents="promptingConent"
  147. :status="promptingStatus"
  148. ></promp-ting>
  149. </div>
  150. </template>
  151. <script>
  152. import "./../../static/css/iconfont.js";
  153. import PrompTing from "./../views/prompting.vue";
  154. export default {
  155. data() {
  156. return {
  157. repairMain: null,
  158. loginUser: JSON.parse(localStorage.getItem("loginUser")),
  159. incidentStateData: "",
  160. treeData: [],
  161. areaData: "",
  162. promptingConent: "",
  163. promptingStatus: ""
  164. };
  165. },
  166. methods: {
  167. toModify(data) {
  168. this.$router.push({
  169. name: "MyModify",
  170. params: {
  171. data
  172. }
  173. });
  174. },
  175. getUserAreaData() {
  176. if (this.loginUser.place && this.loginUser.branch) {
  177. this.areaData = this.loginUser.branch.hosName + " " +this.loginUser.place.area.area + " " + this.loginUser.place.place;
  178. }
  179. },
  180. toIncidentList(res) {
  181. this.$router.push({
  182. name: "IncidentList",
  183. params: {
  184. state: res
  185. }
  186. });
  187. },
  188. getIncidentData() {
  189. var that = this;
  190. this.$http
  191. .post("service/apply/bpm/fetchServiceTasks", {
  192. idx: 0,
  193. sum: 9999
  194. })
  195. .then(function(res) {
  196. that.incidentStateData = res.data;
  197. });
  198. },
  199. getAreaData() {
  200. var that = this;
  201. this.$http
  202. .post("service/user/data/fetchDataList/area", {
  203. idx: 0,
  204. sum: 1000,
  205. area: {
  206. wechatArea: true
  207. }
  208. })
  209. .then(function(res) {
  210. var data = res.data.list;
  211. for (var i = 0; i < data.length; i++) {
  212. that.treeData.push({
  213. text: data[i].area,
  214. value: data[i].id,
  215. children: []
  216. });
  217. }
  218. });
  219. },
  220. getPlaceData() {
  221. this.$http
  222. .post("service/user/data/fetchDataList/place", {
  223. idx: 0,
  224. sum: 1000,
  225. area: {
  226. wechatAreaId: ""
  227. }
  228. })
  229. .then((res) => {
  230. let data = res.data.list;
  231. // for (var i = 0; i < data.length; i++) {
  232. // for (var j = 0; j < that.treeData.length; j++) {
  233. // if (data[i].area.id == that.treeData[j].value) {
  234. // that.treeData[j].children.push({
  235. // text: data[i].place,
  236. // value: data[i].id
  237. // });
  238. // }
  239. // }
  240. // }
  241. console.log(data, 'data');
  242. this.treeData = [];
  243. const collectionBranch = {};
  244. data.forEach((v) => {
  245. if(collectionBranch[v.area.branch]){
  246. collectionBranch[v.area.branch].push(v);
  247. }else{
  248. this.treeData.push({text:v.area.branchName, value: v.area.branch, children: []})
  249. collectionBranch[v.area.branch] = [v];
  250. }
  251. })
  252. this.treeData.forEach(v => {
  253. let areaByPlace = collectionBranch[v.value];
  254. let areaCollection = {};
  255. let areaArr = [];
  256. areaByPlace.forEach(vv => {
  257. if(areaCollection[vv.area.id]){
  258. areaCollection[vv.area.id].push({text:vv.place, value: vv.id});
  259. }else{
  260. areaArr.push({text:vv.area.area, value: vv.area.id, children: []})
  261. areaCollection[vv.area.id] = [{text:vv.place, value: vv.id}];
  262. }
  263. })
  264. areaArr.forEach(vv => {
  265. vv.children = areaCollection[vv.value];
  266. })
  267. v.children = areaArr;
  268. })
  269. console.log(collectionBranch,'collectionBranch集合');
  270. console.log(this.treeData,'地点');
  271. this.cascadePicker = this.$createCascadePicker({
  272. title: "请选择问题地点",
  273. data: this.treeData,
  274. selectedIndex: [0, 0, 0],
  275. onSelect: this.selectHandle,
  276. onCancel: this.cancelHandle
  277. });
  278. });
  279. },
  280. showCascadePicker() {
  281. this.cascadePicker.show();
  282. },
  283. selectHandle(selectedVal, selectedIndex, selectedText) {
  284. var that = this;
  285. this.$http
  286. .get(
  287. "service/user/updPlace/" + this.loginUser.id + "/" + selectedVal[2],
  288. {}
  289. )
  290. .then(function(res) {
  291. if (res.status == 200) {
  292. that.promptingConent = "恭喜您,修改问题地点成功!";
  293. that.promptingStatus = true;
  294. $("#fade").fadeIn();
  295. setTimeout(function() {
  296. $("#fade").fadeOut();
  297. }, 2000);
  298. if (!that.loginUser.place) {
  299. that.loginUser.place = {
  300. area: {}
  301. };
  302. }
  303. that.loginUser.branch = {id: selectedVal[0], hosName:selectedText[0]};
  304. that.loginUser.place = {id:selectedVal[2], place:selectedText[2]};
  305. that.loginUser.place.area = {id:selectedVal[1], area: selectedText[1]};
  306. var loginUserStr = JSON.stringify(that.loginUser);
  307. localStorage.setItem("loginUser", loginUserStr);
  308. that.areaData = selectedText[0] + " " + selectedText[1] + " " + selectedText[2];
  309. } else {
  310. that.promptingConent = "对不起,修改失败,请稍后再试!";
  311. that.promptingStatus = false;
  312. $("#fade").fadeIn();
  313. setTimeout(function() {
  314. $("#fade").fadeOut();
  315. }, 2000);
  316. }
  317. });
  318. },
  319. cancelHandle() {}
  320. },
  321. created() {
  322. this.getUserAreaData();
  323. this.getAreaData();
  324. this.getPlaceData();
  325. this.getIncidentData();
  326. // 获取申请主体
  327. this.repairMain = JSON.parse(localStorage.getItem("repairMain"));
  328. },
  329. mounted() {
  330. // this.cascadePicker = this.$createCascadePicker({
  331. // title: '请选择问题地点',
  332. // data: this.treeData,
  333. // selectedIndex: [0,0],
  334. // onSelect: this.selectHandle,
  335. // onCancel: this.cancelHandle
  336. // })
  337. },
  338. components: {
  339. PrompTing
  340. }
  341. };
  342. </script>
  343. <style scoped>
  344. .bgColor {
  345. background-color: white;
  346. }
  347. .icon {
  348. width: 1em;
  349. height: 1em;
  350. vertical-align: -0.15em;
  351. fill: currentColor;
  352. overflow: hidden;
  353. }
  354. .label {
  355. background-color: rgb(238, 238, 238);
  356. height: 0.6rem;
  357. line-height: 0.6rem;
  358. padding-left: 0.2rem;
  359. font-size: 0.24rem;
  360. color: #666666;
  361. border-top: 0.01rem rgb(223, 222, 222) solid;
  362. border-bottom: 0.01rem rgb(223, 222, 222) solid;
  363. }
  364. /* 头像 */
  365. .head {
  366. height: 1.04rem;
  367. background: linear-gradient(#005395, #226ca8);
  368. padding-top: 0.3rem;
  369. }
  370. .head .img {
  371. width: 1.36rem;
  372. height: 1.36rem;
  373. border-radius: 50%;
  374. margin: 0 auto;
  375. overflow: hidden;
  376. background: url(./../../static/images/avatar-1-big.jpg);
  377. background-size: contain;
  378. }
  379. .head .name {
  380. font-size: 0.32rem;
  381. text-align: center;
  382. margin-top: 0.2rem;
  383. color: #ffffff;
  384. }
  385. /* 个人信息 */
  386. /* .myMessage { */
  387. /* background-color: rgb(242, 242, 242); */
  388. /* margin-top: .2rem */
  389. /* } */
  390. .myMessage li {
  391. border-bottom: 0.01rem rgb(223, 222, 222) solid;
  392. display: flex;
  393. justify-content: space-between;
  394. align-items: center;
  395. /* padding: .2rem .28rem */
  396. /* height: .88rem; */
  397. /* line-height: .88rem; */
  398. line-height: 0.4rem;
  399. padding: 0.24rem 0.24rem;
  400. }
  401. .myMessage li div:nth-child(1) {
  402. width: 35%;
  403. font-size: 0.32rem;
  404. }
  405. .myMessage li div:nth-child(2) {
  406. width: 55%;
  407. display: flex;
  408. justify-content: flex-end;
  409. font-size: 0.32rem;
  410. /* line-height: .3rem */
  411. }
  412. .factionAdd {
  413. display: flex;
  414. justify-content: space-between;
  415. align-items: center;
  416. }
  417. .factionAdd span {
  418. display: inline-block;
  419. width: 90%;
  420. text-align: right;
  421. }
  422. .factionAdd i {
  423. display: inline-block;
  424. font-size: 0.34rem;
  425. width: 12%;
  426. }
  427. /* 申请列表 */
  428. /* .myRapir {
  429. margin-top: .2rem
  430. } */
  431. .myRapir .tit {
  432. /* background-color: rgb(242, 242, 242); */
  433. height: 0.88rem;
  434. line-height: 0.88rem;
  435. display: flex;
  436. padding: 0 0.24rem;
  437. font-size: 0.32rem;
  438. justify-content: space-between;
  439. border-bottom: 0.01rem rgb(223, 222, 222) solid;
  440. }
  441. .rapirMessage {
  442. display: flex;
  443. height: 1.4rem;
  444. border-bottom: 0.01rem rgb(223, 222, 222) solid;
  445. }
  446. .rapirMessage .status {
  447. width: 16.5%;
  448. border-left: 0.01rem rgb(223, 222, 222) solid;
  449. display: flex;
  450. align-items: center;
  451. justify-content: center;
  452. flex-direction: column;
  453. }
  454. .rapirMessage .status div:nth-child(1) {
  455. width: 100%;
  456. text-align: center;
  457. }
  458. .rapirMessage .status div:nth-child(1) svg {
  459. width: 0.48rem;
  460. height: 0.48rem;
  461. }
  462. .rapirMessage .status div:nth-child(2) {
  463. margin-top: 0.2rem;
  464. display: flex;
  465. align-items: center;
  466. }
  467. .rapirMessage .status div:nth-child(2) span:nth-child(1) {
  468. font-size: 0.24rem;
  469. color: #333333;
  470. }
  471. .rapirMessage .status div:nth-child(2) span:nth-child(2) {
  472. display: inline-block;
  473. margin-left: 0.08rem;
  474. font-size: 0.32rem;
  475. }
  476. </style>
  477. <style>
  478. .myArea .cube-btn {
  479. padding: 0 !important;
  480. background-color: white !important;
  481. color: #333333 !important;
  482. text-align: right !important;
  483. overflow: hidden;
  484. white-space: normal;
  485. text-overflow: ellipsis;
  486. }
  487. </style>