allowWriteAgainSummary.vue 30 KB

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