VisitSummaryAdd.vue 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153
  1. <template>
  2. <div class="bgcolor VisitSummaryAdd">
  3. <!-- 顶部条-->
  4. <!-- 顶部条-->
  5. <div class="navBarTOP">
  6. <van-nav-bar class="navBar" left-arrow :title="title" @click-left="onClickLeft" />
  7. </div>
  8. <!-- 主体内容-->
  9. <div class="lineGrey"></div>
  10. <div class="lineGrey"></div>
  11. <div class="lineGrey"></div>
  12. <div class="lineGrey"></div>
  13. <div class="lineGrey"></div>
  14. <div class="lineGrey" style="height: 6px"></div>
  15. <div class="container" style="width: 94%; margin: 0px auto; border-radius: 6px">
  16. <van-form ref="tabstoreVal">
  17. <div v-for="(item, index) in collectionItemList" :key="index">
  18. <div v-if="item.answerType == 'sz'" class="formLabel z-cell">
  19. <van-cell>
  20. <template #title>
  21. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  22. </template>
  23. </van-cell>
  24. <van-field
  25. v-model="item.answerValue"
  26. :placeholder="item.customName"
  27. type="number"
  28. @input="numberFn(item, index)"></van-field>
  29. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  30. {{ item.remark }}
  31. </p>
  32. </div>
  33. <div v-if="item.answerType == 'rq'" class="formLabel z-cell">
  34. <van-cell>
  35. <template #title>
  36. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  37. </template>
  38. </van-cell>
  39. <van-field
  40. v-model="item.answerValue"
  41. clickable
  42. name="calendar"
  43. placeholder="点击选择日期"
  44. readonly
  45. @click="showCalendarClick(index)" />
  46. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  47. {{ item.remark }}
  48. </p>
  49. </div>
  50. <div v-if="item.answerType == 'zp'" class="formLabel z-cell">
  51. <van-cell>
  52. <template #title>
  53. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  54. </template>
  55. </van-cell>
  56. <van-row gutter="10" style="margin-bottom: 10px">
  57. <p style="margin-top: 0">
  58. <span style="font-size: 12px; color: #888">{{ item.remark }}</span>
  59. </p>
  60. <delete-upload-img :imgs="item.fileInfoList" :isDelete="false"></delete-upload-img>
  61. <upload-img
  62. :uploadid="uploadid2"
  63. @newimgarr="newimgarr1"
  64. imgText="上传照片"
  65. :indexImg="index"
  66. :customId="item.customId"
  67. :summaryId="item.summaryId"
  68. :item="item"
  69. @click="imgClick(item, index)"></upload-img>
  70. </van-row>
  71. </div>
  72. <div v-if="item.answerType == 'wb'" class="formLabel z-cell">
  73. <van-cell>
  74. <template #title>
  75. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  76. </template>
  77. </van-cell>
  78. <van-field
  79. v-model="item.answerValue"
  80. :formatter="formatter"
  81. autosize
  82. type="textarea"
  83. :placeholder="item.customName"></van-field>
  84. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  85. {{ item.remark }}
  86. </p>
  87. </div>
  88. <div v-if="item.answerType == 'gs'" class="formLabel z-cell" @click="regionClick(index)">
  89. <van-cell>
  90. <template #title>
  91. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  92. </template>
  93. </van-cell>
  94. <van-field
  95. readonly
  96. v-model="item.answerName"
  97. :formatter="formatter"
  98. :placeholder="item.customName"></van-field>
  99. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  100. {{ item.remark }}
  101. </p>
  102. </div>
  103. <div
  104. v-if="item.answerType == 'dq'"
  105. class="formLabel z-cell"
  106. @click="SalesRegionClick(index)">
  107. <van-cell>
  108. <template #title>
  109. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  110. </template>
  111. </van-cell>
  112. <van-field
  113. readonly
  114. v-model="item.answerName"
  115. :formatter="formatter"
  116. :placeholder="item.customName"></van-field>
  117. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  118. {{ item.remark }}
  119. </p>
  120. </div>
  121. <div
  122. v-if="item.answerType == 'xsb'"
  123. class="formLabel z-cell"
  124. @click="SalesDepartmentClick(index)">
  125. <van-cell>
  126. <template #title>
  127. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  128. </template>
  129. </van-cell>
  130. <van-field
  131. readonly
  132. v-model="item.answerName"
  133. :formatter="formatter"
  134. :placeholder="item.customName"></van-field>
  135. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  136. {{ item.remark }}
  137. </p>
  138. </div>
  139. <div v-if="item.answerType == 'duox'" class="formLabel z-cell">
  140. <van-cell>
  141. <template #title>
  142. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  143. </template>
  144. </van-cell>
  145. <z-checkbox
  146. :answerType="item.answerType"
  147. :checkboxval="item.answerValue"
  148. :collectionType="item.customOptionList"
  149. :textc="item.customId"
  150. :zCheckboxcolumns="item.customOptionList"
  151. @zSelectVal="zSelectVal"></z-checkbox>
  152. </div>
  153. <div v-if="item.answerType == 'dx'" class="formLabel z-cell">
  154. <van-cell>
  155. <template #title>
  156. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  157. </template>
  158. </van-cell>
  159. <z-radio
  160. :answerType="item.answerType"
  161. :collectionType="item.collectionType"
  162. :radio="item.answerValue"
  163. :textc="item.customId"
  164. :zRadiocolumns="item.customOptionList"
  165. @zSelectVal="zSelectVal"></z-radio>
  166. </div>
  167. <div v-if="item.answerType == 'jxs'" class="formLabel z-cell">
  168. <van-cell>
  169. <template #title>
  170. <span v-if="item.isMust == 0" class="van-f-red">*</span>{{ item.customName }}
  171. </template>
  172. </van-cell>
  173. <div class="jxsBox">
  174. <div class="jxsContent">
  175. <div class="item" v-for="(val, index) in item.chainList">
  176. <el-popover
  177. placement="bottom"
  178. trigger="click"
  179. :content="val.chainName + '(' + val.chainCode + ')'">
  180. <template slot="reference">
  181. <div class="selectItem">{{ val.chainName }} &nbsp; ({{ val.chainCode }})</div>
  182. <van-icon name="clear" size="16" @click="closeJXS(item, index)" />
  183. </template>
  184. </el-popover>
  185. </div>
  186. </div>
  187. <div class="addJXS"><van-icon name="add-o" size="24" @click="addJXS" /></div>
  188. <div class="tips">{{ item.remark }}</div>
  189. </div>
  190. </div>
  191. <br />
  192. </div>
  193. </van-form>
  194. </div>
  195. <br />
  196. <div class="tc" style="padding: 0 16px">
  197. <van-button class="submitBtn" block type="primary" @click="onStorage"> 暂存 </van-button>
  198. <van-button class="submitBtn" block type="info" color="#0057ba" @click="onSubmit">
  199. 提交汇报
  200. </van-button>
  201. </div>
  202. <br />
  203. <van-calendar
  204. v-model="showCalendar"
  205. @confirm="onConfirm"
  206. color="#0057ba"
  207. :min-date="minDate"
  208. :max-date="maxDate"
  209. :show-confirm="false" />
  210. <van-popup v-model="RegionShow" capture position="bottom">
  211. <van-picker
  212. :columns="companyList"
  213. show-toolbar
  214. value-key="deptName"
  215. @cancel="RegionShow = false"
  216. @confirm="onregionConfirm" />
  217. </van-popup>
  218. <van-popup v-model="SalesRegionShow" capture position="bottom">
  219. <van-picker
  220. :columns="regionList"
  221. show-toolbar
  222. value-key="deptName"
  223. @cancel="SalesRegionShow = false"
  224. @confirm="onSalesRegionConfirm" />
  225. </van-popup>
  226. <van-popup v-model="SalesDepartmentShow" capture position="bottom">
  227. <van-picker
  228. :columns="deptList"
  229. show-toolbar
  230. value-key="deptName"
  231. @cancel="SalesDepartmentShow = false"
  232. @confirm="onSalesDepartmentConfirm" />
  233. </van-popup>
  234. <van-popup v-model="StartTimeShow" capture position="bottom">
  235. <van-datetime-picker
  236. v-model="strtcurrentDate"
  237. :max-date="strtmaxDate"
  238. :min-date="strtminDate"
  239. title="选择查找开始时间"
  240. type="date"
  241. @cancel="StartTimeShow = false"
  242. @confirm="onStartTimeConfirm" />
  243. </van-popup>
  244. <van-popup v-model="EndTimeShow" capture position="bottom">
  245. <van-datetime-picker
  246. v-model="endcurrentDate"
  247. :max-date="endmaxDate"
  248. :min-date="endminDate"
  249. title="选择查找结束时间"
  250. type="date"
  251. @cancel="EndTimeShow = false"
  252. @confirm="onEndTimeConfirm" />
  253. </van-popup>
  254. <!-- 经销商 -->
  255. <van-popup v-model="moreTypeShow" position="bottom">
  256. <van-row style="background-color: #f5f5f5">
  257. <van-col span="20">
  258. <van-field
  259. left-icon="search"
  260. style="margin-top: 2px; border-radius: 6px; overflow: hidden"
  261. v-model="agentValue"
  262. label=""
  263. placeholder="请输入关键词"
  264. clearable />
  265. </van-col>
  266. <van-col
  267. span="4"
  268. style="text-align: center; line-height: 48px"
  269. @click="getChainsList(agentValue)">
  270. <div style="background-color: #0057ba; color: #fff">搜索</div>
  271. </van-col>
  272. </van-row>
  273. <van-picker
  274. show-toolbar
  275. :columns="chainsData"
  276. value-key="chainName"
  277. @confirm="onConfirmChainsList"
  278. @cancel="moreTypeShow = false" />
  279. </van-popup>
  280. </div>
  281. </template>
  282. <script>
  283. import timeico from '@/assets/Icon/datatims.png';
  284. import {
  285. insertCustomAnswer,
  286. getSummaryDetailById,
  287. getDeptInfo,
  288. getSummaryMobileDeptInfo,
  289. getDeptsByUser,
  290. chainsList,
  291. temporarilyCustomAnswer,
  292. } from '@/api/index';
  293. import zRadio from '@/components/zRadio2';
  294. import zCheckbox from '@/components/zCheckbox2';
  295. // import uploadImg from "@/components/uo";
  296. import uploadImg from '@/components/uploadVTask';
  297. import deleteUploadImg from '@/components/deleteUploadImg2';
  298. export default {
  299. name: 'MyHistoricalWeekly',
  300. components: { zRadio, zCheckbox, uploadImg, deleteUploadImg },
  301. data() {
  302. return {
  303. timeico: timeico,
  304. RegionShow: false,
  305. SalesRegionShow: false,
  306. SalesDepartmentShow: false,
  307. StaffShow: false,
  308. StartTimeShow: false,
  309. dateIndex: '',
  310. EndTimeShow: false,
  311. uploadid2: 'uploadid2',
  312. PhotoTypeList: [{ text: '009', value: '09' }],
  313. strtminDate: new Date(2022, 0, 1),
  314. endminDate: new Date(2022, 0, 1),
  315. minDate: new Date(2020, 0, 1),
  316. maxDate: new Date(2090, 0, 31),
  317. strtmaxDate: new Date(),
  318. endmaxDate: new Date(),
  319. strtcurrentDate: new Date(),
  320. endcurrentDate: new Date(),
  321. companyName: '全部公司',
  322. deptName: '全部销售部',
  323. regionName: '全部大区',
  324. userName: '全部',
  325. companyCode: '',
  326. deptCode: '',
  327. regionCode: '',
  328. userCode: '',
  329. companyList: [],
  330. title: '',
  331. deptList: [],
  332. regionList: [],
  333. userList: [],
  334. deptForm: { type: '', parentId: '' },
  335. list: [],
  336. loading: false,
  337. finished: true,
  338. showCalendar: false,
  339. formData: {
  340. type: '2', // 汇报类型或入口 1-下属业务员日报 2-下属销售部主管周报 3-下属大区主管半月报
  341. companyId: '', // 公司id,必传 Long类型
  342. regionId: '', // 大区id,必传 Long类型
  343. deptId: '', // 部门id,如果为周报或日报为必传 Long类型
  344. userId: '', // 业务员id,如果为日报为必传 Long类型
  345. startTime: '', // 开始时间,必传 格式:yyyy-MM-dd String类型
  346. endTime: '', // 结束时间,必传 格式:yyyy-MM-dd String类型
  347. pageNum: 1, // 当前页码 int类型
  348. pageSize: 10, // 当前每页条数 int类型
  349. },
  350. tableList: [],
  351. collectionItemList: [],
  352. collectionAnswerlisd: [],
  353. flagclick: true,
  354. index: '',
  355. activaFlag: true,
  356. moreTypeShow: false,
  357. agentValue: '',
  358. chainsData: [],
  359. chainName: '',
  360. chainCode: '',
  361. jxsList: [],
  362. };
  363. },
  364. created() {
  365. this.activaFlag = true;
  366. // this.formData.startTime = this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'),2)
  367. this.formData.startTime = this.getThreeDaysAgo();
  368. // this.strtcurrentDate=new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'),2))
  369. this.strtcurrentDate = new Date(this.getThreeDaysAgo());
  370. this.formData.endTime = this.parseTime(new Date(), '{y}-{m}-{d}') + '';
  371. this.endminDate = new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'), 2));
  372. this.powerGrade = localStorage.getItem('powerGrade');
  373. this.title = this.$route.query.title;
  374. this.getReportInfo();
  375. this.regionCode = '';
  376. },
  377. watch: {
  378. $route(to, from) {
  379. if (to.path == '/VisitSummaryAdd') {
  380. this.title = this.$route.query.title;
  381. this.getReportInfo();
  382. this.regionCode = '';
  383. }
  384. },
  385. },
  386. methods: {
  387. showCalendarClick(val) {
  388. this.dateIndex = val;
  389. this.showCalendar = true;
  390. },
  391. formatDate(date) {
  392. var Month = date.getMonth() + 1;
  393. var Day = date.getDate();
  394. if (Month < 10) {
  395. Month = '0' + Month;
  396. }
  397. if (Day < 10) {
  398. Day = '0' + Day;
  399. }
  400. return `${date.getFullYear()}-${Month}-${Day}`;
  401. },
  402. onConfirm(date) {
  403. this.showCalendar = false;
  404. this.collectionItemList[this.dateIndex].answerValue = this.formatDate(date);
  405. },
  406. formatter(value) {
  407. return value.replace(
  408. /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/gi,
  409. ''
  410. );
  411. },
  412. numberFn(val, index) {
  413. if (!/^[+-]?\d*\.{0,1}\d{0,1}$/.test(this.collectionItemList[index].answerValue)) {
  414. this.collectionItemList[index].answerValue = this.collectionItemList[
  415. index
  416. ].answerValue.replace(
  417. /\.\d{2,}$/,
  418. this.collectionItemList[index].answerValue.substr(
  419. this.collectionItemList[index].answerValue.indexOf('.'),
  420. 3
  421. )
  422. );
  423. }
  424. },
  425. zSelectVal(value) {
  426. var collectionAnswerlisd = this.collectionAnswerlisd;
  427. if (collectionAnswerlisd.length > 0) {
  428. var num = 0;
  429. for (var a = 0; a < collectionAnswerlisd.length; a++) {
  430. if (collectionAnswerlisd[a].id == value.id) {
  431. collectionAnswerlisd[a] = value;
  432. num = 0;
  433. } else {
  434. num = 1;
  435. }
  436. }
  437. if (num > 0) {
  438. collectionAnswerlisd.push(value);
  439. }
  440. } else {
  441. collectionAnswerlisd.push(value);
  442. }
  443. this.collectionAnswerlisd = collectionAnswerlisd;
  444. },
  445. imgClick(val, index) {
  446. this.collectionId = val.collectionId + '';
  447. this.indeximg = index;
  448. this.show = true;
  449. },
  450. newimgarr1() {
  451. this.$forceUpdate();
  452. // if (
  453. // this.collectionItemList[val.index].fileInfoList == null ||
  454. // this.collectionItemList[val.index].fileInfoList == undefined
  455. // ) {
  456. // this.collectionItemList[val.index].fileInfoList = [];
  457. // this.collectionItemList[val.index].fileIdList = [];
  458. // }
  459. // this.collectionItemList[val.index].fileInfoList.push(val);
  460. // this.collectionItemList[val.index].fileIdList.push(val.id);
  461. },
  462. dateFn(val) {
  463. return val.slice(0, 4) + '-' + val.slice(4, 6) + '-' + val.slice(6, 8);
  464. },
  465. onLoad() {},
  466. onSubmit() {
  467. this.setParams(() => {
  468. if (this.flagclick) {
  469. this.flagclick = false;
  470. this.timer = null;
  471. this.timer = setTimeout(() => {
  472. this.flagclick = true;
  473. }, 2000);
  474. insertCustomAnswer({
  475. userSummaryId: '', // Long 用户总结id,如果为新增则不填,编辑则必填
  476. summaryId: this.$route.query.summaryId, //Long 主管任务id
  477. customItemList: this.collectionItemList, //List<Object> 答案列表
  478. })
  479. .then((res) => {
  480. if (res.code == 200) {
  481. this.$router.go(-1);
  482. } else {
  483. this.$toast(res.msg);
  484. }
  485. })
  486. .catch((err) => {
  487. this.$toast(err.msg);
  488. });
  489. }
  490. });
  491. },
  492. setParams(callback) {
  493. for (var c = 0; c < this.collectionAnswerlisd.length; c++) {
  494. for (var b = 0; b < this.collectionItemList.length; b++) {
  495. if (this.collectionAnswerlisd[c].id == this.collectionItemList[b].customId) {
  496. this.collectionItemList[b].customOptionList = this.collectionAnswerlisd[c].value;
  497. }
  498. }
  499. }
  500. // // 照片
  501. let zpDataList = this.collectionItemList.find((item) => item.answerType == 'zp');
  502. if (zpDataList && zpDataList.fileInfoList) {
  503. let fileIdList = [];
  504. zpDataList.fileInfoList.forEach((item) => {
  505. fileIdList.push(item.id);
  506. });
  507. zpDataList.fileIdList = fileIdList;
  508. }
  509. // 经销商
  510. // let JXSSataList = this.collectionItemList.find((item) => item.answerType == 'jxs');
  511. // if (this.jxsList.length) {
  512. // let fileIdList = [];
  513. // this.jxsList.forEach((item) => {
  514. // fileIdList.push({
  515. // chainCode: item.chainCode,
  516. // chainName: item.chainName,
  517. // });
  518. // });
  519. // JXSSataList.chainList = fileIdList;
  520. // }
  521. callback && callback();
  522. },
  523. getReportInfo() {
  524. let loading1 = this.$toast.loading({
  525. duration: 0,
  526. message: '加载中...',
  527. forbidClick: true,
  528. });
  529. this.collectionItemList = [];
  530. this.collectionAnswerlisd = [];
  531. getSummaryDetailById({ summaryId: this.$route.query.summaryId }).then((res) => {
  532. loading1.clear();
  533. if (res.code == 200) {
  534. var collectionItemLists = res.data;
  535. for (var q = 0; q < collectionItemLists.length; q++) {
  536. collectionItemLists[q].answerName = undefined;
  537. // 公司
  538. if (
  539. (collectionItemLists[q].answerType == 'gs' ||
  540. collectionItemLists[q].answerType == 'dq' ||
  541. collectionItemLists[q].answerType == 'xsb') &&
  542. this.activaFlag
  543. ) {
  544. this.activaFlag = false;
  545. if (collectionItemLists[q].answerType == 'xsb') {
  546. this.getDeptsBy(collectionItemLists[q].answerValue);
  547. this.getDeptInfo(
  548. 'dept',
  549. collectionItemLists[q].answerType,
  550. collectionItemLists[q].answerValue
  551. );
  552. } else {
  553. this.getDeptInfo(
  554. 'dept',
  555. collectionItemLists[q].answerType,
  556. collectionItemLists[q].answerValue
  557. );
  558. }
  559. }
  560. // 单选
  561. if (
  562. collectionItemLists[q].answerType == 'dx' &&
  563. collectionItemLists[q].showHistory == '1'
  564. ) {
  565. let findCustom = collectionItemLists[q].customOptionList.find((item) => item.checked);
  566. if (findCustom) {
  567. collectionItemLists[q].answerValue = findCustom.customOptionId + '';
  568. }
  569. }
  570. // 多选
  571. if (
  572. collectionItemLists[q].answerType == 'duox' &&
  573. collectionItemLists[q].showHistory == '1'
  574. ) {
  575. let findCustom = [];
  576. collectionItemLists[q].customOptionList.forEach((item) => {
  577. if (item.checked) {
  578. findCustom.push(item.customOptionId + '');
  579. }
  580. });
  581. if (findCustom) {
  582. collectionItemLists[q].answerValue = findCustom.join(',');
  583. }
  584. }
  585. // 照片
  586. if (collectionItemLists[q].answerType == 'zp' && collectionItemLists[q].fileInfoList) {
  587. let fileIdList = [];
  588. collectionItemLists[q].fileInfoList.forEach((item) => {
  589. fileIdList.push(item.id);
  590. });
  591. collectionItemLists[q].fileIdList = fileIdList;
  592. }
  593. }
  594. this.collectionItemList = collectionItemLists;
  595. }
  596. });
  597. },
  598. getThreeDaysAgo() {
  599. let myDate = new Date();
  600. let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 14); //最后一个数字30可改,30天的意思
  601. let lastY = lw.getFullYear();
  602. let lastM = lw.getMonth() + 1;
  603. let lastD = lw.getDate();
  604. let startData =
  605. lastY + '-' + (lastM < 10 ? '0' + lastM : lastM) + '-' + (lastD < 10 ? '0' + lastD : lastD); //三十天之前日期
  606. return startData;
  607. },
  608. GetPreMonthDay(date, monthNum, type) {
  609. var dateArr = date.split('-');
  610. var year = dateArr[0]; //获取当前日期的年份
  611. var month = dateArr[1]; //获取当前日期的月份
  612. var day = dateArr[2]; //获取当前日期的日
  613. var days = new Date(year, month, 0);
  614. days = days.getDate(); //获取当前日期中月的天数
  615. var year2 = year;
  616. var month2 = parseInt(month) - monthNum;
  617. if (month2 <= 0) {
  618. var absM = Math.abs(month2);
  619. year2 = parseInt(year2) - Math.ceil(absM / 12 == 0 ? 1 : parseInt(absM) / 12);
  620. month2 = 12 - (absM % 12);
  621. }
  622. var day2 = day;
  623. var days2 = new Date(year2, month2, 0);
  624. days2 = days2.getDate();
  625. if (day2 > days2) {
  626. day2 = days2;
  627. }
  628. if (month2 < 10) {
  629. month2 = '0' + month2;
  630. }
  631. var t2 = '';
  632. if (monthNum > 0) {
  633. t2 = year2 + '-' + month2 + '-01';
  634. } else {
  635. if (type == 'end') {
  636. var Months = new Date().getMonth() + 1;
  637. var days111 = new Date().getDate();
  638. if (Months < 10) {
  639. Months = '0' + Months;
  640. }
  641. if (days111 < 10) {
  642. days111 = '0' + days111;
  643. }
  644. if (parseInt(month2) >= new Date().getMonth() + 1) {
  645. t2 = year2 + '-' + Months + '-' + days111;
  646. } else {
  647. var daysd = this.getMonthDays(year2, month2);
  648. t2 = year2 + '-' + month2 + '-' + daysd;
  649. }
  650. } else {
  651. t2 = year2 + '-' + month2 + '-' + day2;
  652. }
  653. }
  654. return t2;
  655. },
  656. getMonthDays(year, month) {
  657. var stratDate = new Date(year, month - 1, 1),
  658. endData = new Date(year, month, 1);
  659. var days = (endData - stratDate) / (1000 * 60 * 60 * 24);
  660. return days;
  661. },
  662. getDeptInfo(type, grade, answerValue) {
  663. this.deptForm.type = type;
  664. if (grade == 'dq') {
  665. this.deptForm.parentId = this.companyCode;
  666. } else if (grade == 'xsb') {
  667. this.deptForm.parentId = this.regionCode;
  668. } else {
  669. this.deptForm.type = '';
  670. this.deptForm.parentId = '';
  671. }
  672. getSummaryMobileDeptInfo(this.deptForm).then((res) => {
  673. if (grade == 'dq') {
  674. if (res.data.region != null) {
  675. this.regionList = res.data.region;
  676. // for (var k = 0; k < this.collectionItemList.length; k++) {
  677. // if (this.collectionItemList[k].answerType == 'dq') {
  678. // this.collectionItemList[k].answerName = res.data.region[0].deptName;
  679. // this.collectionItemList[k].answerValue = res.data.region[0].deptCode;
  680. // }
  681. // }
  682. if (answerValue) {
  683. let findCompany = this.companyList.find((item) => item.deptCode == answerValue);
  684. this.onSalesRegionConfirm(findCompany);
  685. } else {
  686. this.onSalesRegionConfirm(this.regionList[0]);
  687. }
  688. }
  689. } else if (grade == 'xsb') {
  690. if (res.data.dept != null) {
  691. this.deptList = res.data.dept;
  692. if (answerValue) {
  693. let findCompany = this.regionList.find((item) => item.deptCode == answerValue);
  694. this.onSalesDepartmentConfirm(findCompany);
  695. } else {
  696. this.onSalesDepartmentConfirm(this.deptList[0]);
  697. }
  698. }
  699. } else if (grade == 'gs') {
  700. this.companyList = res.data.company;
  701. if (answerValue) {
  702. let findCompany = this.companyList.find((item) => item.deptCode == answerValue);
  703. this.onregionConfirm(findCompany);
  704. } else {
  705. this.onregionConfirm(this.companyList[0]);
  706. }
  707. if (res.data.dept != null) {
  708. this.deptList = res.data.dept;
  709. }
  710. if (res.data.region != null) {
  711. this.regionList = res.data.region;
  712. }
  713. }
  714. });
  715. },
  716. getDeptsBy(answerValue) {
  717. getDeptsByUser().then((res) => {
  718. if (res.data && res.code == 200) {
  719. let arr = [];
  720. res.data.forEach((val) => {
  721. arr.push({
  722. ancestors: val.ancestors || '',
  723. deptCode: val.deptCode || '',
  724. deptId: val.deptId || '',
  725. deptLevel: val.deptLevel || '',
  726. deptName: val.deptName || '',
  727. parentId: val.parentId || '',
  728. });
  729. });
  730. this.deptList = arr;
  731. if (answerValue) {
  732. let findCompany = this.regionList.find((item) => item.deptCode == answerValue);
  733. this.onSalesDepartmentConfirm(findCompany);
  734. } else {
  735. this.onSalesDepartmentConfirm(this.deptList[0]);
  736. }
  737. }
  738. });
  739. },
  740. dailyFn(row) {
  741. if (row.status != '0') {
  742. if (row.status == -1) {
  743. var dayTime = row.showDate;
  744. var times = new Date(
  745. dayTime.slice(0, 4) + '-' + dayTime.slice(4, 6) + '-' + dayTime.slice(6, 8)
  746. ).getTime();
  747. var time = new Date('2022-08-25').getTime();
  748. if (times < time) {
  749. this.$dialog.alert({
  750. title: '系统提示',
  751. message: '非常抱歉,8月25日前历史报告数据不存在',
  752. });
  753. } else {
  754. this.$router.push({
  755. path: '/weeklyHistoricalDetils',
  756. query: { reportId: row.id },
  757. });
  758. }
  759. } else {
  760. this.$router.push({
  761. path: '/weeklyHistoricalDetils',
  762. query: { reportId: row.id },
  763. });
  764. }
  765. }
  766. },
  767. onClickLeft() {
  768. this.$router.go(-1);
  769. },
  770. regionClick(val) {
  771. // if(this.powerGrade>4){
  772. this.index = val;
  773. this.RegionShow = true;
  774. // }
  775. },
  776. SalesRegionClick(val) {
  777. this.index = val;
  778. this.SalesRegionShow = true;
  779. },
  780. SalesDepartmentClick(val) {
  781. this.index = val;
  782. this.SalesDepartmentShow = true;
  783. },
  784. StaffClick() {
  785. this.StaffShow = true;
  786. },
  787. StartTimeClick() {
  788. this.StartTimeShow = true;
  789. },
  790. EndTimeClick() {
  791. this.EndTimeShow = true;
  792. },
  793. onSalesRegionConfirm(val) {
  794. this.SalesRegionShow = false;
  795. this.regionCode = val.deptId;
  796. // if (this.index !== '') {
  797. // this.collectionItemList[this.index].answerName = val.deptName;
  798. // this.collectionItemList[this.index].answerValue = val.deptCode;
  799. // for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  800. // if (this.collectionItemList[k1].answerType == 'xsb' && val.deptId != '') {
  801. // this.getDeptInfo('dept', 'xsb');
  802. // }
  803. // }
  804. // } else {
  805. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  806. if (this.collectionItemList[k1].answerType == 'xsb') {
  807. this.collectionItemList[k1].answerName = '';
  808. this.collectionItemList[k1].answerValue = '';
  809. }
  810. if (this.collectionItemList[k1].answerType == 'dq') {
  811. this.collectionItemList[k1].answerName = val.deptName;
  812. this.collectionItemList[k1].answerValue = val.deptCode;
  813. }
  814. if (this.collectionItemList[k1].answerType == 'xsb' && val.deptId != '') {
  815. this.getDeptInfo('dept', 'xsb');
  816. }
  817. }
  818. // }
  819. // if (val.deptId != '') {
  820. // this.getDeptInfo('dept', 'xsb');
  821. // }
  822. },
  823. onregionConfirm(val) {
  824. this.RegionShow = false;
  825. this.companyCode = val.deptId;
  826. // if (this.index !== '') {
  827. // this.collectionItemList[this.index].answerName = val.deptName;
  828. // this.collectionItemList[this.index].answerValue = val.deptCode;
  829. // for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  830. // if (this.collectionItemList[k1].answerType == 'dq') {
  831. // this.getDeptInfo('dept', 'dq');
  832. // }
  833. // }
  834. // } else {
  835. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  836. if (this.collectionItemList[k1].answerType == 'xsb') {
  837. this.collectionItemList[k1].answerName = '';
  838. this.collectionItemList[k1].answerValue = '';
  839. }
  840. if (this.collectionItemList[k1].answerType == 'xsb') {
  841. this.collectionItemList[k1].answerName = '';
  842. this.collectionItemList[k1].answerValue = '';
  843. }
  844. if (this.collectionItemList[k1].answerType == 'gs') {
  845. this.collectionItemList[k1].answerName = val.deptName;
  846. this.collectionItemList[k1].answerValue = val.deptCode;
  847. }
  848. if (this.collectionItemList[k1].answerType == 'dq') {
  849. this.getDeptInfo('dept', 'dq');
  850. }
  851. }
  852. // }
  853. },
  854. onSalesDepartmentConfirm(val) {
  855. this.SalesDepartmentShow = false;
  856. // if (this.index !== '') {
  857. // this.collectionItemList[this.index].answerName = val.deptName;
  858. // this.collectionItemList[this.index].answerValue = val.deptCode;
  859. // } else {
  860. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  861. if (this.collectionItemList[k1].answerType == 'xsb') {
  862. this.collectionItemList[k1].answerName = val.deptName;
  863. this.collectionItemList[k1].answerValue = val.deptCode;
  864. }
  865. }
  866. // }
  867. },
  868. onStartTimeConfirm(val) {
  869. this.formData.startTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  870. this.StartTimeShow = false;
  871. this.endminDate = new Date(val);
  872. this.endmaxDate = new Date(this.GetPreMonthDay(this.formData.startTime, -2, 'end'));
  873. if (
  874. new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime() ||
  875. new Date(this.endmaxDate).getTime() < new Date(this.formData.endTime).getTime()
  876. ) {
  877. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  878. this.endcurrentDate = this.GetPreMonthDay(this.formData.startTime, -2);
  879. }
  880. this.list = [];
  881. this.formData.pageNum = 1;
  882. },
  883. onEndTimeConfirm(val) {
  884. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}');
  885. this.strtmaxDate = new Date(val);
  886. if (new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime()) {
  887. this.formData.startTime = this.formData.endTime;
  888. }
  889. this.list = [];
  890. this.formData.pageNum = 1;
  891. this.EndTimeShow = false;
  892. },
  893. // 添加经销商
  894. addJXS() {
  895. this.agentValue = '';
  896. this.moreTypeShow = true;
  897. this.getChainsList();
  898. },
  899. // 删除经销商
  900. closeJXS(item, index) {
  901. item.chainList.splice(index, 1);
  902. },
  903. getChainsList(value = '') {
  904. this.chainsData = [];
  905. chainsList({
  906. chainCode: '', // string 经销商编码
  907. chainName: value, // string 经销商名称
  908. })
  909. .then((res) => {
  910. if (res.code == 200 && res.rows) {
  911. this.chainsData = res.rows;
  912. } else {
  913. this.chainsData = [];
  914. }
  915. })
  916. .catch(() => {
  917. this.chainsData = [];
  918. });
  919. },
  920. onConfirmChainsList(value) {
  921. if (value && value.chainName != undefined) {
  922. let JXSSataList = this.collectionItemList.find((item) => item.answerType == 'jxs');
  923. if (!JXSSataList.chainList) {
  924. JXSSataList.chainList = [];
  925. }
  926. let isFlag = JXSSataList.chainList.find((val) => val.chainCode == value.chainCode);
  927. if (!isFlag) {
  928. JXSSataList.chainList.push({
  929. chainName: value.chainName,
  930. chainCode: value.chainCode,
  931. });
  932. this.moreTypeShow = false;
  933. } else {
  934. this.$toast('当前经销商已添加,不能重复添加!');
  935. }
  936. }
  937. },
  938. // 暂存 不校验答案是否必填
  939. onStorage() {
  940. this.setParams(() => {
  941. temporarilyCustomAnswer({
  942. userSummaryId: '', // Long 用户总结id,如果为新增则不填,编辑则必填
  943. summaryId: this.$route.query.summaryId, //Long 主管任务id
  944. customItemList: this.collectionItemList, //List<Object> 答案列表
  945. })
  946. .then((res) => {
  947. if (res.code == 200) {
  948. this.$router.go(-1);
  949. } else {
  950. this.$toast(res.msg);
  951. }
  952. })
  953. .catch((err) => {
  954. this.$toast(err.msg);
  955. });
  956. });
  957. },
  958. },
  959. };
  960. </script>
  961. <style scoped lang="scss">
  962. .container {
  963. background-color: white;
  964. }
  965. .van-f-red {
  966. color: red;
  967. width: 8px;
  968. display: inline-block;
  969. line-height: 26px;
  970. }
  971. .formLabel {
  972. margin: 0 16px;
  973. border-bottom: 1px solid #f1f1f1;
  974. }
  975. .formLabel .van-cell {
  976. padding: 10px 0;
  977. }
  978. .formLabel .van-cell::after {
  979. border: 0;
  980. }
  981. .formLabel .van-field {
  982. border: 1px solid #f1f1f1;
  983. padding: 6px;
  984. width: 100%;
  985. border-radius: 4px;
  986. overflow: hidden;
  987. }
  988. .formLabel .van-field__control {
  989. padding: 0 10px;
  990. }
  991. .formLabel .formLabeltitle {
  992. position: absolute;
  993. top: 8px;
  994. }
  995. .lineGrey {
  996. height: 10px;
  997. width: 100%;
  998. background: #f1f1f1;
  999. }
  1000. .z-checkbox .van-radio {
  1001. padding: 6px 0;
  1002. }
  1003. .z-cell .van-cell__title {
  1004. font-size: 16px;
  1005. }
  1006. .VisitSummaryAdd {
  1007. .tc {
  1008. display: flex;
  1009. justify-content: space-between;
  1010. .submitBtn {
  1011. width: 45%;
  1012. border-radius: 20px;
  1013. }
  1014. }
  1015. }
  1016. </style>
  1017. <style lang="scss">
  1018. .table-headermd {
  1019. font-size: 12px;
  1020. text-align: center;
  1021. position: initial;
  1022. width: 98% !important;
  1023. margin: 0 auto;
  1024. border-right: 0;
  1025. }
  1026. .table-headermd .el-table__header,
  1027. .table-headermd .el-table__body {
  1028. width: 100% !important;
  1029. }
  1030. /*.table-headermd col {width: 6.8rem;}*/
  1031. .table-headermd col:nth-child(4) {
  1032. width: 5.6rem;
  1033. }
  1034. .table-headermd col:nth-child(2),
  1035. .table-headermd col:nth-child(3) {
  1036. width: 4.6rem;
  1037. }
  1038. .table-headermd .van-cell {
  1039. padding: 0 4px;
  1040. height: 100%;
  1041. }
  1042. .table-headermd th.el-table__cell > .cell {
  1043. padding: 0 4px;
  1044. text-align: center;
  1045. }
  1046. .table-headermd th.el-table__cell:first-child > .cell {
  1047. text-align: left;
  1048. }
  1049. .table-headermd th.el-table__cell {
  1050. background-color: #1989fa;
  1051. color: #fff;
  1052. }
  1053. .table-headermd .el-table__cell {
  1054. padding: 4px 0;
  1055. }
  1056. .table-headermd.el-table .cell {
  1057. padding: 0;
  1058. }
  1059. .table-headermd .tipTitle {
  1060. overflow: hidden;
  1061. text-overflow: ellipsis;
  1062. display: -webkit-box;
  1063. -webkit-box-orient: vertical;
  1064. -webkit-line-clamp: 2;
  1065. }
  1066. .table-headermd::before {
  1067. height: 0;
  1068. }
  1069. .xing {
  1070. color: red;
  1071. padding-left: 4px;
  1072. }
  1073. .formLabel .van-radio__label,
  1074. .formLabel .van-checkbox__label {
  1075. font-size: 1.4rem;
  1076. }
  1077. .table-headermd .cell,
  1078. .el-table--border .el-table__cell:first-child .cell {
  1079. padding: 0 4px;
  1080. }
  1081. .van-dialog__confirm,
  1082. .van-dialog__confirm:active {
  1083. color: #1989fa;
  1084. }
  1085. .navBarTOP {
  1086. position: fixed;
  1087. width: 100%;
  1088. z-index: 2;
  1089. top: 0;
  1090. }
  1091. .isTableMust {
  1092. padding: 4px;
  1093. color: #999;
  1094. margin: 0;
  1095. margin-top: -10px;
  1096. }
  1097. .jxsBox {
  1098. .jxsContent {
  1099. margin-bottom: 10px;
  1100. .item {
  1101. padding: 5px;
  1102. background: #e9e9e9;
  1103. margin: 5px 0;
  1104. .el-popover__reference-wrapper {
  1105. display: flex;
  1106. justify-content: space-between;
  1107. align-items: center;
  1108. }
  1109. .selectItem {
  1110. flex: 1;
  1111. white-space: nowrap;
  1112. overflow: hidden;
  1113. text-overflow: ellipsis;
  1114. font-size: 14px;
  1115. }
  1116. }
  1117. }
  1118. .tips {
  1119. text-align: right;
  1120. }
  1121. }
  1122. </style>