index.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <!--
  2. 自定义时间轴
  3. @Author:laiyh
  4. @Date: 2020-08-03
  5. -->
  6. <template>
  7. <div>
  8. <p v-if="formData.length == 0" class="no-data">暂无对应的授权管理范围审计信息</p>
  9. <el-timeline :reverse="reverse" class="my-time-line" v-if="formData && formData.length > 0">
  10. <template v-for="(item, index) in formData">
  11. <h1 class="header-year" :id="'year' + index" @click="doShowHide($event, index)">
  12. {{ item.YEAR }}年 <span class="turn-down"></span>
  13. </h1>
  14. <h1 class="header-title"><i class="el-icon-time"></i>{{ title }}</h1>
  15. <el-timeline-item
  16. :timestamp="item.date"
  17. color="#3cdab4"
  18. placement="top"
  19. v-for="(childItem, childInde) in item.childrens"
  20. :key="'childTime' + Math.random()"
  21. :class="'year-child' + index"
  22. >
  23. <span class="dateMonth">{{ childItem.dateStr }}</span>
  24. <h4 class="line-title">{{ transformOperateType(childItem) }}</h4>
  25. <p class="line-sub-title">
  26. 授权管理机构:<span class="color-blue">{{ childItem.objectName }}</span>
  27. &nbsp;&nbsp;&nbsp;机构配额:<span class="color-blue">{{ childItem.number }}</span>
  28. </p>
  29. <p class="line-sub-title">
  30. 操作人姓名:
  31. <span class="line-sub-text">{{ childItem.operateUserName }}</span>
  32. &nbsp;&nbsp;&nbsp; 单位名称:
  33. <span class="line-sub-text">{{ childItem.operateOrgName }}</span>
  34. &nbsp;&nbsp;&nbsp; 操作时间:
  35. <span class="line-sub-text">{{ childItem.operateTime }}</span>
  36. </p>
  37. </el-timeline-item>
  38. </template>
  39. </el-timeline>
  40. </div>
  41. </template>
  42. <script>
  43. export default {
  44. name: "index",
  45. // 接收父页面传过来的属性
  46. props: {
  47. title: {
  48. type: String,
  49. default: ""
  50. },
  51. timeData: {
  52. type: Array,
  53. required: false,
  54. default: () => {
  55. return [];
  56. }
  57. },
  58. // 审计类型
  59. auditType: {
  60. type: String,
  61. required: true,
  62. default: ""
  63. },
  64. reverse: {
  65. type: Boolean,
  66. default: false
  67. }
  68. },
  69. // 页面数据绑定
  70. data() {
  71. return {
  72. formData: []
  73. };
  74. },
  75. // 计算属性
  76. computed: {},
  77. mounted() {
  78. for (let i = 0; i < this.timeData.length; i++) {
  79. let obj = {
  80. YEAR: "",
  81. childrens: []
  82. };
  83. if (this.timeData[i].operateTime) {
  84. let arr1 = this.timeData[i].operateTime.split(" ");
  85. let arr2 = arr1[0].split("-");
  86. if (this.formData.length == 0) {
  87. obj.YEAR = arr2[0];
  88. obj.childrens.push({
  89. ...this.timeData[i],
  90. dateStr: arr2[1] + "月" + arr2[2] + "日"
  91. });
  92. this.formData.push(obj);
  93. } else {
  94. let falg = false;
  95. let index;
  96. for (let j = 0; j < this.formData.length; j++) {
  97. if (arr2[0] == this.formData[j].YEAR) {
  98. falg = true;
  99. index = j;
  100. break;
  101. }
  102. }
  103. if (!falg) {
  104. obj.YEAR = arr2[0];
  105. obj.childrens.push({ ...this.timeData[i], dateStr: arr2[1] + "月" + arr2[2] + "日" });
  106. this.formData.push(obj);
  107. } else {
  108. this.formData[index].YEAR = arr2[0];
  109. this.formData[index].childrens.push({
  110. ...this.timeData[i],
  111. dateStr: arr2[1] + "月" + arr2[2] + "日"
  112. });
  113. }
  114. }
  115. }
  116. }
  117. // console.log(this.formData);
  118. },
  119. // 方法
  120. methods: {
  121. transformOperateType({ operateType, objectType }) {
  122. let transformString = "";
  123. if (this.auditType == "user_audit") {
  124. if (operateType == "10") {
  125. transformString = "新增";
  126. } else if (operateType == "20") {
  127. transformString = "修改";
  128. } else if (operateType == "30") {
  129. transformString = "删除";
  130. } else if (operateType == "40") {
  131. transformString = "审批通过";
  132. } else if (operateType == "41") {
  133. transformString = "审批不通过";
  134. } else if (operateType == "50") {
  135. transformString = "启用";
  136. } else if (operateType == "51") {
  137. transformString = "停用";
  138. } else if (operateType == "61") {
  139. transformString = "入职";
  140. } else if (objectType == "62") {
  141. transformString = "离职";
  142. } else {
  143. transformString = "";
  144. }
  145. }
  146. if (this.auditType == "org_audit") {
  147. if (operateType == "10") {
  148. transformString = "新增机构";
  149. } else if (operateType == "20") {
  150. transformString = "修改机构";
  151. } else if (operateType == "30") {
  152. transformString = "删除机构";
  153. } else if (operateType == "40") {
  154. transformString = "调离机构";
  155. } else if (operateType == "50") {
  156. transformString = "合并机构";
  157. } else {
  158. transformString = "";
  159. }
  160. } else {
  161. if (operateType == "10") {
  162. transformString = "管理员创建";
  163. } else if (operateType == "11") {
  164. transformString = "管理员删除";
  165. } else if (operateType == "20") {
  166. transformString = "平台菜单权限新增";
  167. } else if (operateType == "21") {
  168. transformString = "平台菜单权限移除";
  169. } else if (operateType == "30") {
  170. transformString = "机构管理范围新增";
  171. } else if (operateType == "31") {
  172. transformString = "机构管理范围变更";
  173. } else if (operateType == "40") {
  174. transformString = "用户管理范围新增";
  175. } else if (operateType == "41") {
  176. transformString = "用户管理范围变更";
  177. } else if (objectType == "50") {
  178. transformString = "授权管理范围新增";
  179. } else if (objectType == "51") {
  180. transformString = "授权管理范围变更";
  181. } else if (objectType == "60") {
  182. transformString = "管理员管理范围新增";
  183. } else if (objectType == "61") {
  184. transformString = "管理员管理范围变更";
  185. } else {
  186. transformString = "";
  187. }
  188. }
  189. return transformString;
  190. },
  191. doShowHide(e, index) {
  192. // console.log(e);
  193. let $span = $(e.target).children();
  194. if ($span && $span.hasClass("turn-right")) {
  195. // console.log(1);
  196. $span.removeClass("turn-right");
  197. $(".year-child" + index).slideDown(1000);
  198. } else {
  199. $span.addClass("turn-right");
  200. $(".year-child" + index).slideUp(1000);
  201. }
  202. }
  203. },
  204. // 创建组件时调用
  205. created() {}
  206. };
  207. </script>
  208. <style scope lang="scss">
  209. .no-data {
  210. font-size: 20px;
  211. margin: 50px auto 0;
  212. width: 50%;
  213. }
  214. /deep/.el-timeline .el-timeline-item:last-child .el-timeline-item__tail {
  215. display: block;
  216. }
  217. .my-time-line {
  218. padding-left: 160px;
  219. position: relative;
  220. .header-year {
  221. position: absolute;
  222. left: 50px;
  223. color: #00bbff;
  224. font-size: 25px;
  225. }
  226. .turn-down {
  227. width: 0;
  228. height: 0;
  229. border-width: 5px 5px 0 5px;
  230. border-color: black transparent transparent transparent;
  231. border-style: solid;
  232. position: absolute;
  233. top: 16px;
  234. left: 90px;
  235. }
  236. .turn-right {
  237. transform: rotate(-90deg);
  238. }
  239. .el-timeline-item__timestamp.is-top {
  240. margin-bottom: 0;
  241. padding-top: 0;
  242. color: #c3c3c3;
  243. font: normal 18px/16px Arial;
  244. }
  245. .dateMonth {
  246. position: absolute;
  247. left: -84px;
  248. top: -3px;
  249. color: #c3c3c3;
  250. font-size: 18px;
  251. }
  252. .header-title {
  253. font-size: 25px;
  254. margin-bottom: 20px;
  255. i {
  256. font-size: 30px;
  257. color: green;
  258. margin-right: 20px;
  259. }
  260. }
  261. .el-timeline-item__node--normal {
  262. left: 8px;
  263. }
  264. .el-timeline-item__tail {
  265. left: 13px;
  266. }
  267. .line-title {
  268. margin-bottom: 12px;
  269. font: 20px/22px 微软雅黑;
  270. color: #737373;
  271. }
  272. .line-sub-title {
  273. color: #787878;
  274. font-size: 12px;
  275. .color-blue {
  276. font-size: 15px;
  277. color: rgba(0, 0, 255, 0.72);
  278. }
  279. }
  280. .line-sub-text {
  281. font-size: 15px;
  282. }
  283. }
  284. </style>