VisitSummaryMy.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <template>
  2. <div class="bgcolor VisitSummaryMy">
  3. <!-- 顶部条-->
  4. <van-nav-bar
  5. class="navBar"
  6. title="家装推广会历史提报查询"
  7. left-arrow
  8. @click-left="onClickLeft" />
  9. <div class="container contentpd16">
  10. <van-row gutter="20">
  11. <van-col span="12">
  12. <van-cell :title="formData.startTime" is-link @click="StartTimeClick">
  13. <template #right-icon>
  14. <van-icon :name="timeico" class="search-icon" />
  15. </template>
  16. </van-cell>
  17. </van-col>
  18. <van-col span="12">
  19. <van-cell :title="formData.endTime" is-link @click="EndTimeClick">
  20. <template #right-icon>
  21. <van-icon :name="timeico" class="search-icon" />
  22. </template>
  23. </van-cell>
  24. </van-col>
  25. <van-col span="24">
  26. <van-cell class="inputSearch">
  27. <van-field v-model="formData.summaryTaskName" placeholder="请输入任务名称" />
  28. </van-cell>
  29. </van-col>
  30. </van-row>
  31. <br />
  32. <van-button type="info" size="small" plain class="Btn100" @click="searchBtn">查找</van-button>
  33. </div>
  34. <div class="container">
  35. <van-list
  36. v-model="loading"
  37. :finished="finished"
  38. @load="onLoad"
  39. finished-text="--已经到底了--">
  40. <div class="cellcontent brud" v-for="(item, index) in list" :key="index">
  41. <van-cell>
  42. <div class="cardContent" @click="dailyFn(item)">
  43. <div class="title">
  44. <p class="textLeft">{{ item.nickName }}的{{ item.summaryTaskName }}</p>
  45. <div class="approvalStatusBtn" v-if="item.approvalStatus">
  46. <span class="approvalStatusBtn1" v-if="item.approvalStatus == '2'">审批通过</span>
  47. <span class="approvalStatusBtn2" v-if="item.approvalStatus == '1'">
  48. 提交待审批
  49. </span>
  50. <span class="approvalStatusBtn3" v-if="item.approvalStatus == '3'">
  51. 拒绝待提交
  52. </span>
  53. </div>
  54. <div class="approvalStatusBtn" v-if="item.status == '0'">
  55. <span class="status0">暂存</span>
  56. </div>
  57. </div>
  58. <div class="info">提交时间:{{ item.createTime }}</div>
  59. </div>
  60. </van-cell>
  61. </div>
  62. <van-empty v-if="list.length == 0" />
  63. </van-list>
  64. </div>
  65. <br />
  66. <br />
  67. <van-popup v-model="StartTimeShow" capture position="bottom">
  68. <van-datetime-picker
  69. v-model="strtcurrentDate"
  70. type="date"
  71. title="选择查找开始时间"
  72. :min-date="strtminDate"
  73. :max-date="strtmaxDate"
  74. @confirm="onStartTimeConfirm"
  75. @cancel="StartTimeShow = false" />
  76. </van-popup>
  77. <van-popup v-model="EndTimeShow" capture position="bottom">
  78. <van-datetime-picker
  79. v-model="endcurrentDate"
  80. type="date"
  81. title="选择查找结束时间"
  82. :min-date="endminDate"
  83. :max-date="endmaxDate"
  84. @confirm="onEndTimeConfirm"
  85. @cancel="EndTimeShow = false" />
  86. </van-popup>
  87. </div>
  88. </template>
  89. <script>
  90. import timeico from '@/assets/Icon/datatims.png';
  91. import { getDeptInfo, getSummaryMobileDeptInfo, queryHistorySummaryList } from '@/api/index';
  92. export default {
  93. name: 'MyHistoricalWeekly',
  94. data() {
  95. return {
  96. timeico: timeico,
  97. StartTimeShow: false,
  98. EndTimeShow: false,
  99. strtminDate: new Date(2022, 0, 1),
  100. endminDate: new Date(2022, 0, 1),
  101. strtmaxDate: new Date(),
  102. endmaxDate: new Date(),
  103. strtcurrentDate: new Date(),
  104. endcurrentDate: new Date(),
  105. list: [],
  106. loading: false,
  107. finished: true,
  108. formData: {
  109. type: '1', // 汇报类型或入口 1-下属业务员日报 2-下属销售部主管周报 3-下属大区主管半月报
  110. startTime: '', // 开始时间,必传 格式:yyyy-MM-dd String类型
  111. endTime: '', // 结束时间,必传 格式:yyyy-MM-dd String类型
  112. pageNum: 1, // 当前页码 int类型
  113. pageSize: 10, // 当前每页条数 int类型
  114. },
  115. tableList: [],
  116. };
  117. },
  118. activated() {
  119. this.userList = [];
  120. this.formData.startTime = this.getThreeDaysAgo();
  121. this.strtcurrentDate = new Date(this.getThreeDaysAgo());
  122. this.formData.endTime = this.parseTime(new Date(), '{y}-{m}-{d}') + '';
  123. this.endminDate = new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'), 2));
  124. this.searchBtn();
  125. },
  126. watch: {
  127. $route(to, from) {},
  128. },
  129. methods: {
  130. dateFn(val) {
  131. return val.slice(0, 4) + '-' + val.slice(4, 6) + '-' + val.slice(6, 8);
  132. },
  133. onLoad() {
  134. this.querySubReport();
  135. },
  136. searchBtn() {
  137. this.formData.pageNum = 1;
  138. this.list = [];
  139. this.querySubReport();
  140. },
  141. querySubReport() {
  142. let loading1 = this.$toast.loading({
  143. duration: 0,
  144. message: '加载中...',
  145. forbidClick: true,
  146. });
  147. if (this.refreshing) {
  148. this.list = [];
  149. this.refreshing = false;
  150. }
  151. queryHistorySummaryList(this.formData).then((res) => {
  152. loading1.clear();
  153. if (res.code == 200) {
  154. this.loading = false;
  155. this.list = this.list.concat(res.data);
  156. if (this.list.length >= res.total) {
  157. this.finished = true;
  158. } else {
  159. this.finished = false;
  160. }
  161. this.formData.pageNum = this.formData.pageNum + 1;
  162. }
  163. });
  164. },
  165. getThreeDaysAgo() {
  166. let myDate = new Date();
  167. let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 7); //最后一个数字30可改,30天的意思
  168. let lastY = lw.getFullYear();
  169. let lastM = lw.getMonth() + 1;
  170. let lastD = lw.getDate();
  171. let startData =
  172. lastY + '-' + (lastM < 10 ? '0' + lastM : lastM) + '-' + (lastD < 10 ? '0' + lastD : lastD); //三十天之前日期
  173. return startData;
  174. },
  175. GetPreMonthDay(date, monthNum, type) {
  176. var dateArr = date.split('-');
  177. var year = dateArr[0]; //获取当前日期的年份
  178. var month = dateArr[1]; //获取当前日期的月份
  179. var day = dateArr[2]; //获取当前日期的日
  180. var days = new Date(year, month, 0);
  181. days = days.getDate(); //获取当前日期中月的天数
  182. var year2 = year;
  183. var month2 = parseInt(month) - monthNum;
  184. if (month2 <= 0) {
  185. var absM = Math.abs(month2);
  186. year2 = parseInt(year2) - Math.ceil(absM / 12 == 0 ? 1 : parseInt(absM) / 12);
  187. month2 = 12 - (absM % 12);
  188. }
  189. var day2 = day;
  190. var days2 = new Date(year2, month2, 0);
  191. days2 = days2.getDate();
  192. if (day2 > days2) {
  193. day2 = days2;
  194. }
  195. if (month2 < 10) {
  196. month2 = '0' + month2;
  197. }
  198. var t2 = '';
  199. if (monthNum > 0) {
  200. t2 = year2 + '-' + month2 + '-01';
  201. } else {
  202. if (type == 'end') {
  203. var Months = new Date().getMonth() + 1;
  204. var days111 = new Date().getDate();
  205. if (Months < 10) {
  206. Months = '0' + Months;
  207. }
  208. if (days111 < 10) {
  209. days111 = '0' + days111;
  210. }
  211. if (new Date().getFullYear() == year) {
  212. if (parseInt(month2) >= new Date().getMonth() + 1) {
  213. t2 = year2 + '-' + Months + '-' + days111;
  214. } else {
  215. var daysd = this.getMonthDays(year2, month2);
  216. t2 = year2 + '-' + month2 + '-' + daysd;
  217. }
  218. } else {
  219. var daysd = this.getMonthDays(year2, month2);
  220. t2 = year2 + '-' + month2 + '-' + daysd;
  221. }
  222. } else {
  223. t2 = year2 + '-' + month2 + '-' + day2;
  224. }
  225. }
  226. return t2;
  227. },
  228. getMonthDays(year, month) {
  229. var stratDate = new Date(year, month - 1, 1),
  230. endData = new Date(year, month, 1);
  231. var days = (endData - stratDate) / (1000 * 60 * 60 * 24);
  232. return days;
  233. },
  234. dailyFn(row) {
  235. // 暂存
  236. if (row.status == '0') {
  237. this.$router.push({
  238. path: '/VisitSummaryStorageDetail',
  239. query: { userSummaryId: row.userSummaryId, source: '/VisitSummaryMy' },
  240. });
  241. } else {
  242. this.$router.push({
  243. path: '/VisitSummaryDetail',
  244. query: { userSummaryId: row.userSummaryId, source: '/VisitSummaryMy' },
  245. });
  246. }
  247. },
  248. onClickLeft() {
  249. this.$router.replace({
  250. path: '/My/index',
  251. });
  252. },
  253. StartTimeClick() {
  254. this.StartTimeShow = true;
  255. },
  256. EndTimeClick() {
  257. this.EndTimeShow = true;
  258. },
  259. onStartTimeConfirm(val) {
  260. this.formData.startTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  261. this.StartTimeShow = false;
  262. this.endminDate = new Date(val);
  263. this.endmaxDate = new Date(this.GetPreMonthDay(this.formData.startTime, -2, 'end'));
  264. if (
  265. new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime() ||
  266. new Date(this.endmaxDate).getTime() < new Date(this.formData.endTime).getTime()
  267. ) {
  268. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  269. this.endcurrentDate = this.GetPreMonthDay(this.formData.startTime, -2);
  270. }
  271. },
  272. onEndTimeConfirm(val) {
  273. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}');
  274. this.strtmaxDate = new Date(val);
  275. if (new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime()) {
  276. this.formData.startTime = this.formData.endTime;
  277. }
  278. this.EndTimeShow = false;
  279. },
  280. },
  281. };
  282. </script>
  283. <style>
  284. .cardContent {
  285. padding: 0;
  286. box-sizing: border-box;
  287. }
  288. .cardContent .title {
  289. font-size: 15px;
  290. font-weight: bold;
  291. color: #333;
  292. line-height: 22px;
  293. display: flex;
  294. justify-content: space-between;
  295. }
  296. .cardContent .title p {
  297. padding: 0;
  298. margin: 0;
  299. }
  300. .cardContent .title .textLeft {
  301. display: inline-block;
  302. padding-bottom: 10px;
  303. }
  304. .cardContent .title .textRight {
  305. float: right;
  306. color: #0057ba;
  307. }
  308. .cardContent .info {
  309. font-size: 14px;
  310. color: #666;
  311. line-height: 26px;
  312. }
  313. .search-icon {
  314. font-size: 16px;
  315. line-height: inherit;
  316. margin-top: 4px;
  317. }
  318. .brud {
  319. margin: 16px;
  320. border-radius: 8px;
  321. overflow: hidden;
  322. }
  323. .contentpd16 {
  324. padding: 16px;
  325. background-color: white;
  326. }
  327. .Btn100 {
  328. margin: 0 auto 10px;
  329. display: block;
  330. width: 100%;
  331. border-radius: 5px;
  332. color: #fff !important;
  333. background-color: #0057ba;
  334. border: 1px solid #0057ba;
  335. height: 36px;
  336. }
  337. .contentpd16 .van-cell {
  338. background-color: #ebf4ff;
  339. margin: 8px 0;
  340. border-radius: 5px;
  341. padding: 4px 16px;
  342. }
  343. .elTreeTableLsiy th.el-table__cell > .cell {
  344. text-align: center;
  345. }
  346. .elTreeTableLsiy td.el-table__cell div {
  347. text-align: right;
  348. }
  349. .elTreeTableLsiy .el-table__cell {
  350. padding: 2px 0;
  351. }
  352. .elTreeTableLsiy .el-table__cell:first-child .cell {
  353. text-align: center;
  354. }
  355. .contentpd16 .inputSearch .van-cell {
  356. padding: 0;
  357. margin: 4px 0;
  358. }
  359. </style>
  360. <style scoped lang="scss">
  361. .VisitSummaryMy {
  362. .brud {
  363. position: relative;
  364. }
  365. .approvalStatusBtn {
  366. span {
  367. color: #fff;
  368. border-radius: 5px;
  369. display: inline-block;
  370. padding: 3px 5px;
  371. font-size: 14px;
  372. width: 80px;
  373. text-align: center;
  374. }
  375. .approvalStatusBtn1 {
  376. background-color: #12ea7a;
  377. }
  378. .approvalStatusBtn2 {
  379. background-color: rgb(112, 33, 239);
  380. }
  381. .approvalStatusBtn3 {
  382. background-color: red;
  383. }
  384. .status1 {
  385. background-color: #07c160;
  386. }
  387. .status0 {
  388. background-color: #ff976a;
  389. }
  390. }
  391. }
  392. </style>