backwardtabke.vue 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877
  1. <template>
  2. <div>
  3. <div class="backward-all">
  4. <div class="backward-head">
  5. <div class="backward-head-li">
  6. <label>团组名称:</label>
  7. <el-select @change="changegroup" style="width:250px" v-model="value" filterable :filter-method="advancedFilter"
  8. placeholder="请选择">
  9. <el-option v-for="item in filteredOptions" :key="item.id" :label="item.teamName" :value="item.id">
  10. </el-option>
  11. </el-select>
  12. </div>
  13. <div class="backward-head-li">
  14. <span style="color: red;"><spu>*</spu>会务倒退表没有预览直接下载即可</span>
  15. <el-button @click="InforRetrogressTableFileDownload" type="primary">导出会务倒退表</el-button>
  16. <el-button @click="PostInvertedListCreate" type="primary">生成倒推表</el-button>
  17. <el-button @click="PostInvertedListUpdate" type="primary">保 存</el-button>
  18. <el-button @click="PostInvertedListFileDownload" type="primary">导出倒推表</el-button>
  19. </div>
  20. </div>
  21. <div class="backward-title">
  22. <div class="backward-title-yi">{{groupinfo.teamName}}团出行准备流程表</div>
  23. <div class="backward-title-er">
  24. 出访国家:{{groupinfo.visitCountry}}&nbsp;&nbsp;&nbsp;&nbsp;出访时间:{{groupinfo.visitStartDate|capitalize}}</div>
  25. </div>
  26. <div class="backward-table">
  27. <div class="backward-table-li">
  28. <div class="backward-li-span">
  29. <el-checkbox v-model="datainfo.isSelectedAirportd"></el-checkbox>
  30. </div>
  31. <div class="backward-li-span">
  32. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.approvalDataDt" type="date" placeholder="选择日期">
  33. </el-date-picker>
  34. </div>
  35. <div class="backward-li-span">报批资料准备</div>
  36. <div class="backward-li-span">
  37. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  38. v-model="datainfo.approvalDataRemark">
  39. </el-input>
  40. </div>
  41. </div>
  42. <div class="backward-table-li">
  43. <div class="backward-li-span">
  44. <el-checkbox v-model="datainfo.isSelectedApprovalData"></el-checkbox>
  45. </div>
  46. <div class="backward-li-span">
  47. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.approvalDt" type="date" placeholder="选择日期">
  48. </el-date-picker>
  49. </div>
  50. <div class="backward-li-span">
  51. <div style="line-height: 25px;">
  52. 报批/提供送签资料
  53. </div>
  54. <div style="line-height: 25px;">
  55. <el-radio v-model="datainfo.approvalType" label="1">预批件</el-radio>
  56. <el-radio v-model="datainfo.approvalType" label="2">正常批件</el-radio>
  57. </div>
  58. </div>
  59. <div class="backward-li-span">
  60. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  61. v-model="datainfo.approvalRemark">
  62. </el-input>
  63. </div>
  64. </div>
  65. <div class="backward-table-li">
  66. <div class="backward-li-span">
  67. <el-checkbox v-model="datainfo.isSelectedIssueApproval"></el-checkbox>
  68. </div>
  69. <div class="backward-li-span">
  70. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.issueApprovalDt" type="date" placeholder="选择日期">
  71. </el-date-picker>
  72. </div>
  73. <div class="backward-li-span"><div style="line-height: 25px;padding: 0;">出批件</div><div style="line-height: 25px;padding: 0;">护照办理</div></div>
  74. <div class="backward-li-span">
  75. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  76. v-model="datainfo.issueApprovalRemark">
  77. </el-input>
  78. </div>
  79. </div>
  80. <!-- <div class="backward-table-li">
  81. <div class="backward-li-span">
  82. <el-date-picker v-model="datainfo.applyPassportDt" type="date" placeholder="选择日期">
  83. </el-date-picker>
  84. </div>
  85. <div class="backward-li-span">护照办理</div>
  86. <div class="backward-li-span">
  87. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  88. v-model="datainfo.applyPassportRemark">
  89. </el-input>
  90. </div>
  91. </div> -->
  92. <div class="backward-table-li">
  93. <div class="backward-li-span">
  94. <el-checkbox v-model="datainfo.isSelectedVisaInfo"></el-checkbox>
  95. </div>
  96. <div class="backward-li-span">
  97. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.visaInformationDt" type="date" placeholder="选择日期">
  98. </el-date-picker>
  99. </div>
  100. <div class="backward-li-span">签证资料准备</div>
  101. <div class="backward-li-span">
  102. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  103. v-model="datainfo.visaInformationRemark">
  104. </el-input>
  105. </div>
  106. </div>
  107. <div class="backward-table-li">
  108. <div class="backward-li-span">
  109. <el-checkbox v-model="datainfo.isSelectedSendVisa"></el-checkbox>
  110. </div>
  111. <div class="backward-li-span">
  112. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.sendVisaDt" type="date" placeholder="选择日期">
  113. </el-date-picker>
  114. </div>
  115. <div class="backward-li-span">送签签证</div>
  116. <div class="backward-li-span">
  117. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  118. v-model="datainfo.sendVisaRemark">
  119. </el-input>
  120. </div>
  121. </div>
  122. <div class="backward-table-li">
  123. <div class="backward-li-span">
  124. <!-- <el-checkbox v-model="isSelectedAirportd"></el-checkbox> -->
  125. </div>
  126. <div class="backward-li-span">
  127. 送签国家选择:
  128. </div>
  129. <div class="backward-li-span"></div>
  130. <div class="backward-li-span">
  131. <el-table :data="datainfo.visaCountryData" border style="width: 100%">
  132. <el-table-column prop="country" label="国家">
  133. <template slot-scope="scope">
  134. <el-input v-model="scope.row.country" placeholder="请输入内容"></el-input>
  135. </template>
  136. </el-table-column>
  137. <el-table-column prop="officialTypeId" label="公务类型" width="180">
  138. <template slot-scope="scope">
  139. <el-select style="width:100%" v-model="scope.row.officialTypeId" clearable placeholder="请选择"
  140. @change="filterStatus(value)">
  141. <el-option v-for="item in officialTypeData" :key="item.id" :label="item.name"
  142. :value="item.id">
  143. </el-option>
  144. </el-select>
  145. </template>
  146. </el-table-column>
  147. <el-table-column prop="visaTypeId" label="签证类型" width="180">
  148. <template slot-scope="scope">
  149. <el-select style="width:100%" v-model="scope.row.visaTypeId" clearable placeholder="请选择"
  150. @change="filterStatus(value)">
  151. <el-option v-for="item in visaTypeData" :key="item.id" :label="item.name"
  152. :value="item.id">
  153. </el-option>
  154. </el-select>
  155. </template>
  156. </el-table-column>
  157. <el-table-column prop="visaDay" label="签证时间" width="180">
  158. <template slot-scope="scope">
  159. <el-input-number style="width:100%" :min="1" :precision="0" placeholder="数量" v-model="scope.row.visaDay" :controls='false'>
  160. </el-input-number>
  161. </template>
  162. </el-table-column>
  163. </el-table>
  164. </div>
  165. </div>
  166. <div class="backward-table-li">
  167. <div class="backward-li-span">
  168. <el-checkbox v-model="datainfo.isSelectedIssueVisa"></el-checkbox>
  169. </div>
  170. <div class="backward-li-span">
  171. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.issueVisaDt" type="date" placeholder="选择日期">
  172. </el-date-picker>
  173. </div>
  174. <div class="backward-li-span">出签</div>
  175. <div class="backward-li-span">
  176. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  177. v-model="datainfo.issueVisaRemark">
  178. </el-input>
  179. </div>
  180. </div>
  181. <div class="backward-table-li">
  182. <div class="backward-li-span">
  183. <el-checkbox v-model="datainfo.isSelectedAirTicket"></el-checkbox>
  184. </div>
  185. <div class="backward-li-span">
  186. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.airTicketDt" type="date" placeholder="选择日期">
  187. </el-date-picker>
  188. </div>
  189. <div class="backward-li-span">机票</div>
  190. <div class="backward-li-span">
  191. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  192. v-model="datainfo.airTicketRemark">
  193. </el-input>
  194. </div>
  195. </div>
  196. <div class="backward-table-li">
  197. <div class="backward-li-span">
  198. <el-checkbox v-model="datainfo.isSelectedHotel"></el-checkbox>
  199. </div>
  200. <div class="backward-li-span">
  201. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.hotelDt" type="date" placeholder="选择日期">
  202. </el-date-picker>
  203. </div>
  204. <div class="backward-li-span">酒店</div>
  205. <div class="backward-li-span">
  206. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  207. v-model="datainfo.hotelRemark">
  208. </el-input>
  209. </div>
  210. </div>
  211. <div class="backward-table-li">
  212. <div class="backward-li-span">
  213. <el-checkbox v-model="datainfo.isSelectedPreTripMeeting"></el-checkbox>
  214. </div>
  215. <div class="backward-li-span">
  216. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.preTripMeetingDt" type="date" placeholder="选择日期">
  217. </el-date-picker>
  218. </div>
  219. <div class="backward-li-span">开行前会</div>
  220. <div class="backward-li-span">
  221. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  222. v-model="datainfo.preTripMeetingRemark">
  223. </el-input>
  224. </div>
  225. </div>
  226. <div class="backward-table-li">
  227. <div class="backward-li-span">
  228. <el-checkbox v-model="datainfo.isSelectedAirportdDropOff"></el-checkbox>
  229. </div>
  230. <div class="backward-li-span">
  231. <el-date-picker value-format="yyyy-MM-dd" v-model="datainfo.airportdDropOffDt" type="date" placeholder="选择日期">
  232. </el-date-picker>
  233. </div>
  234. <div class="backward-li-span">送机</div>
  235. <div class="backward-li-span">
  236. <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
  237. v-model="datainfo.airportdDropOffRemark">
  238. </el-input>
  239. </div>
  240. </div>
  241. </div>
  242. </div>
  243. </div>
  244. </template>
  245. <script>
  246. export default {
  247. data () {
  248. return {
  249. userId:'',
  250. token:'',
  251. value:'',
  252. options:[],
  253. filteredOptions: [],
  254. searchMode: 'character', // 'character': 字符匹配, 'fuzzy': 模糊匹配
  255. groupinfo:{},
  256. value1:'',
  257. radio:'1',
  258. datainfo:{
  259. airportdDropOffDt:'',//送机 - A
  260. airportdDropOffRemark:'',//送机 备注
  261. applyPassportDt:'',//办护照时间 - B
  262. applyPassportRemark:'',//办护照 备注
  263. approvalDataDt:'',//报批资料准备时间 - A
  264. approvalDataRemark:'',//报批资料准备 备注
  265. approvalDt:'',//报批时间 - A
  266. approvalRemark:'',//报批 备注
  267. approvalType:0,//报批时间 1 预批件 2 正常批件 默认值??-1
  268. diId:0,
  269. id:0,
  270. isAirportdDropOff:0,//送机 是否完成
  271. isApplyPassport:0,//办护照 是否完成
  272. isApproval:0,//报批 是否完成
  273. isApprovalData:0,//报批资料准备 是否完成
  274. isIssueApproval:0,//出批件 是否完成
  275. isIssueVisa:0,//出签 是否完成
  276. isPreTripMeeting:0,//行前会 是否完成
  277. isQuery:false,//查询标识 true 需提醒客户该团未创建倒推表
  278. isSendVisa:0,//送签 是否完成
  279. isVisaInformation:0,//签证资料准备 是否完成
  280. issueApprovalDt:'',//出批件时间 - A
  281. issueApprovalRemark:'',//出批件时间 备注
  282. issueVisaDt:'',//出签时间 - B
  283. issueVisaRemark:'',//出签 备注
  284. airTicketDt:'',//机票 - B
  285. isAirTicket:0,//机票 是否完成
  286. airTicketRemark:'',//机票 备注
  287. hotelDt:'',//酒店 - B
  288. isHotel:0,//酒店 是否完成
  289. hotelRemark:'',//酒店 备注
  290. isSelectedAirportd:0,//报批资料准备
  291. isSelectedApprovalData:0,//报批/提供送签资料 是否选中
  292. isSelectedIssueApproval:0,//出批件 是否选中
  293. isSelectedVisaInfo:0,//签证资料准备 是否选中
  294. isSelectedSendVisa:0,//送签签证 是否选中
  295. isSelectedIssueVisa:0,//出签 是否选中
  296. isSelectedAirTicket:0,//机票 是否选中
  297. isSelectedHotel:0,//酒店 是否选中
  298. isSelectedPreTripMeeting:0,//行前会 是否选中
  299. isSelectedAirportdDropOff:0,//送机 是否选中
  300. preTripMeetingDt:'',//行前会 - A
  301. preTripMeetingRemark:'',//行前会 备注
  302. sendVisaDt:'',//送签时间 - B
  303. sendVisaRemark:'',//送签 备注
  304. visaCountryData:[],
  305. visaInformationDt:'',//签证资料准备时间
  306. visaInformationRemark:'',//签证资料准备 备注
  307. },
  308. officialTypeData:[],
  309. visaTypeData:[],
  310. }
  311. },
  312. methods:{
  313. advancedFilter(query) {
  314. if (!query || query.trim() === '') {
  315. this.filteredOptions = [...this.options];
  316. return;
  317. }
  318. const trimmedQuery = query.trim();
  319. if (this.searchMode === 'character') {
  320. // 字符匹配模式:每个字都必须包含
  321. this.characterMatchFilter(trimmedQuery);
  322. } else {
  323. // 模糊匹配模式(默认的filterable行为)
  324. this.fuzzyMatchFilter(trimmedQuery);
  325. }
  326. },
  327. /*** 严格的字符匹配 - 每个查询字符都必须出现*/
  328. characterMatchFilter(query) {
  329. const queryChars = query.split('').filter(char => char.trim() !== '');
  330. this.filteredOptions = this.options.filter(item => {
  331. const groupName = item.teamName || '';
  332. return queryChars.every(char => groupName.includes(char));
  333. });
  334. },
  335. /*** 模糊匹配 - 包含整个查询字符串即可*/
  336. fuzzyMatchFilter(query) {
  337. const lowerQuery = query.toLowerCase();
  338. this.filteredOptions = this.options.filter(item => {
  339. const groupName = (item.teamName || '').toLowerCase();
  340. return groupName.includes(lowerQuery);
  341. });
  342. },
  343. //获取团组list
  344. GetGroupNameList() {
  345. var url = "/api/Groups/PostInvertedListInit"
  346. var that = this
  347. this.$axios({
  348. method: 'post',
  349. url: url,
  350. headers: {
  351. Authorization: 'Bearer ' + this.token
  352. },
  353. data: {
  354. portType: 1
  355. }
  356. }).then(function (res) {
  357. if (res.data.code == 200) {
  358. that.options=res.data.data.groupData;
  359. that.filteredOptions= that.options;
  360. console.log(that.filteredOptions);
  361. that.value=that.options[0].id;
  362. that.officialTypeData=res.data.data.officialTypeData;
  363. that.visaTypeData=res.data.data.visaTypeData;
  364. that.officialTypeData.push({id:-1,name:'未选择'});
  365. that.visaTypeData.push({id:-1,name:'未选择'});
  366. that.PostShareGroupInfo();
  367. that.PostInvertedListInfo();
  368. }else{
  369. that.$message.error(res.data.msg);
  370. }
  371. }).catch(function (error) {
  372. that.$message.error(error);
  373. });
  374. },
  375. //获取团组倒推表
  376. PostInvertedListInfo() {
  377. var url = "/api/Groups/PostInvertedListInfo"
  378. var that = this
  379. this.$axios({
  380. method: 'post',
  381. url: url,
  382. headers: {
  383. Authorization: 'Bearer ' + that.token
  384. },
  385. data: {
  386. portType: 1,
  387. diId: that.value
  388. }
  389. }).then(function (res) {
  390. if (res.data.code == 200) {
  391. that.datainfo.airportdDropOffDt=res.data.data.airportdDropOffDt;
  392. that.datainfo.airportdDropOffRemark=res.data.data.airportdDropOffRemark;
  393. that.datainfo.applyPassportDt=res.data.data.applyPassportDt;
  394. that.datainfo.applyPassportRemark=res.data.data.applyPassportRemark;
  395. that.datainfo.approvalDataDt=res.data.data.approvalDataDt;
  396. that.datainfo.approvalDataRemark=res.data.data.approvalDataRemark;
  397. that.datainfo.approvalDt=res.data.data.approvalDt;
  398. that.datainfo.approvalRemark=res.data.data.approvalRemark;
  399. that.datainfo.approvalType=res.data.data.approvalType+'';
  400. that.datainfo.diId=res.data.data.diId;
  401. that.datainfo.id=res.data.data.id;
  402. that.datainfo.isAirportdDropOff=res.data.data.isAirportdDropOff;
  403. that.datainfo.isApplyPassport=res.data.data.isApplyPassport;
  404. that.datainfo.isApproval=res.data.data.isApproval;
  405. that.datainfo.isApprovalData=res.data.data.isApprovalData;
  406. that.datainfo.isIssueApproval=res.data.data.isIssueApproval;
  407. that.datainfo.isIssueVisa=res.data.data.isIssueVisa;
  408. that.datainfo.isPreTripMeeting=res.data.data.isPreTripMeeting;
  409. that.datainfo.isQuery=res.data.data.isQuery;
  410. that.datainfo.isSendVisa=res.data.data.isSendVisa;
  411. that.datainfo.isVisaInformation=res.data.data.isVisaInformation;
  412. that.datainfo.issueApprovalDt=res.data.data.issueApprovalDt;
  413. that.datainfo.issueApprovalRemark=res.data.data.issueApprovalRemark;
  414. that.datainfo.issueVisaDt=res.data.data.issueVisaDt;
  415. that.datainfo.issueVisaRemark=res.data.data.issueVisaRemark;
  416. that.datainfo.airTicketDt=res.data.data.airTicketDt;
  417. that.datainfo.isAirTicket=res.data.data.isAirTicket;
  418. that.datainfo.airTicketRemark=res.data.data.airTicketRemark;
  419. that.datainfo.hotelDt=res.data.data.hotelDt;
  420. that.datainfo.isHotel=res.data.data.isHotel;
  421. that.datainfo.hotelRemark=res.data.data.hotelRemark;
  422. that.datainfo.isSelectedAirportd=res.data.data.isSelectedAirportd;
  423. that.datainfo.isSelectedApprovalData=res.data.data.isSelectedApprovalData;
  424. that.datainfo.isSelectedIssueApproval=res.data.data.isSelectedIssueApproval;
  425. that.datainfo.isSelectedVisaInfo=res.data.data.isSelectedVisaInfo;
  426. that.datainfo.isSelectedSendVisa=res.data.data.isSelectedSendVisa;
  427. that.datainfo.isSelectedIssueVisa=res.data.data.isSelectedIssueVisa;
  428. that.datainfo.isSelectedAirTicket=res.data.data.isSelectedAirTicket;
  429. that.datainfo.isSelectedHotel=res.data.data.isSelectedHotel;
  430. that.datainfo.isSelectedPreTripMeeting=res.data.data.isSelectedPreTripMeeting;
  431. that.datainfo.isSelectedAirportdDropOff=res.data.data.isSelectedAirportdDropOff;
  432. that.datainfo.preTripMeetingDt=res.data.data.preTripMeetingDt;
  433. that.datainfo.preTripMeetingRemark=res.data.data.preTripMeetingRemark
  434. that.datainfo.sendVisaDt=res.data.data.sendVisaDt;
  435. that.datainfo.sendVisaRemark=res.data.data.sendVisaRemark;
  436. that.datainfo.visaCountryData=res.data.data.visaCountryData;
  437. that.datainfo.visaInformationDt=res.data.data.visaInformationDt;
  438. that.datainfo.visaInformationRemark=res.data.data.visaInformationRemark;
  439. if(that.datainfo.isQuery==true){
  440. that.PostInvertedListCreate()
  441. // that.$notify({
  442. // title: '提示',
  443. // message: '暂无签证费用信息!',
  444. // duration: 0
  445. // });
  446. }
  447. }else{
  448. that.$message.error(res.data.msg);
  449. }
  450. }).catch(function (error) {
  451. that.$message.error(error);
  452. });
  453. },
  454. //数据初始化
  455. datacsh(){
  456. this.datainfo={
  457. airportdDropOffDt:'',//送机 - A
  458. airportdDropOffRemark:'',//送机 备注
  459. applyPassportDt:'',//办护照时间 - B
  460. applyPassportRemark:'',//办护照 备注
  461. approvalDataDt:'',//报批资料准备时间 - A
  462. approvalDataRemark:'',//报批资料准备 备注
  463. approvalDt:'',//报批时间 - A
  464. approvalRemark:'',//报批 备注
  465. approvalType:0,//报批时间 1 预批件 2 正常批件 默认值??-1
  466. diId:0,
  467. id:0,
  468. isAirportdDropOff:0,//送机 是否完成
  469. isApplyPassport:0,//办护照 是否完成
  470. isApproval:0,//报批 是否完成
  471. isApprovalData:0,//报批资料准备 是否完成
  472. isIssueApproval:0,//出批件 是否完成
  473. isIssueVisa:0,//出签 是否完成
  474. airTicketDt:'',//机票 - B
  475. isAirTicket:0,//机票 是否完成
  476. airTicketRemark:'',//机票 备注
  477. hotelDt:'',//酒店 - B
  478. isHotel:0,//酒店 是否完成
  479. hotelRemark:'',//酒店 备注
  480. isSelectedAirportd:0,//送机 是否选中
  481. isSelectedApprovalData:0,//报批/提供送签资料 是否选中
  482. isSelectedIssueApproval:0,//出批件 是否选中
  483. isSelectedVisaInfo:0,//签证资料准备 是否选中
  484. isSelectedSendVisa:0,//送签签证 是否选中
  485. isSelectedIssueVisa:0,//出签 是否选中
  486. isSelectedAirTicket:0,//机票 是否选中
  487. isSelectedHotel:0,//酒店 是否选中
  488. isSelectedPreTripMeeting:0,//行前会 是否选中
  489. isSelectedAirportdDropOff:0,//送机 是否选中
  490. isPreTripMeeting:0,//行前会 是否完成
  491. isQuery:false,//查询标识 true 需提醒客户该团未创建倒推表
  492. isSendVisa:0,//送签 是否完成
  493. isVisaInformation:0,//签证资料准备 是否完成
  494. issueApprovalDt:'',//出批件时间 - A
  495. issueApprovalRemark:'',//出批件时间 备注
  496. issueVisaDt:'',//出签时间 - B
  497. issueVisaRemark:'',//出签 备注
  498. preTripMeetingDt:'',//行前会 - A
  499. preTripMeetingRemark:'',//行前会 备注
  500. sendVisaDt:'',//送签时间 - B
  501. sendVisaRemark:'',//送签 备注
  502. visaCountryData:[],
  503. visaInformationDt:'',//签证资料准备时间
  504. visaInformationRemark:'',//签证资料准备 备注
  505. }
  506. },
  507. //获取团组info
  508. PostShareGroupInfo() {
  509. var url = "/api/Business/PostShareGroupInfo"
  510. var that = this
  511. this.$axios({
  512. method: 'post',
  513. url: url,
  514. headers: {
  515. Authorization: 'Bearer ' + this.token
  516. },
  517. data: {
  518. portType: 1,
  519. id: that.value,
  520. }
  521. }).then(function (res) {
  522. if (res.data.code == 200) {
  523. that.groupinfo=res.data.data;
  524. }else{
  525. that.$message.error(res.data.msg);
  526. }
  527. }).catch(function (error) {
  528. that.$message.error(error);
  529. });
  530. },
  531. //团组切换
  532. changegroup(){
  533. this.datacsh();
  534. this.PostShareGroupInfo();
  535. this.PostInvertedListInfo();
  536. },
  537. //生成会务倒推表
  538. InforRetrogressTableFileDownload() {
  539. var url = "/api/Groups/InforRetrogressTableFileDownload"
  540. var that = this
  541. this.$axios({
  542. method: 'post',
  543. url: url,
  544. headers: {
  545. Authorization: 'Bearer ' + this.token
  546. },
  547. data: {
  548. groupId:that.value,
  549. currUserId: that.userId
  550. }
  551. }).then(function (res) {
  552. if (res.data.code == 200) {
  553. that.$message({
  554. message:res.data.msg ,
  555. type: 'success',
  556. offset:50
  557. });
  558. window.open(res.data.data.url)
  559. }else{
  560. that.$message.error(res.data.msg);
  561. }
  562. }).catch(function (error) {
  563. that.$message.error(error);
  564. });
  565. },
  566. //生成倒推表
  567. PostInvertedListCreate() {
  568. var url = "/api/Groups/PostInvertedListCreate"
  569. var that = this
  570. this.$axios({
  571. method: 'post',
  572. url: url,
  573. headers: {
  574. Authorization: 'Bearer ' + this.token
  575. },
  576. data: {
  577. portType: 1,
  578. diId: that.value
  579. }
  580. }).then(function (res) {
  581. if (res.data.code == 200) {
  582. that.$message({
  583. message:res.data.msg ,
  584. type: 'success',
  585. offset:50
  586. });
  587. that.PostInvertedListInfo();
  588. }else{
  589. that.$message.error(res.data.msg);
  590. }
  591. }).catch(function (error) {
  592. that.$message.error(error);
  593. });
  594. },
  595. //保存
  596. PostInvertedListUpdate() {
  597. var that = this
  598. var url = "/api/Groups/PostInvertedListUpdate"
  599. this.$axios({
  600. method: 'post',
  601. url: url,
  602. headers: {
  603. Authorization: 'Bearer ' + this.token
  604. },
  605. data: {
  606. portType: 1,
  607. isQuery:that.datainfo.isQuery,
  608. id: that.datainfo.id,
  609. diId: that.datainfo.diId,
  610. approvalDataDt: that.datainfo.approvalDataDt,
  611. isApprovalData: that.datainfo.isApprovalData,
  612. approvalDataRemark: that.datainfo.approvalDataRemark,
  613. approvalDt: that.datainfo.approvalDt,
  614. approvalType: that.datainfo.approvalType,
  615. isApproval: that.datainfo.isApproval,
  616. approvalRemark: that.datainfo.approvalRemark,
  617. issueApprovalDt: that.datainfo.issueApprovalDt,
  618. isIssueApproval: that.datainfo.isIssueApproval,
  619. issueApprovalRemark: that.datainfo.issueApprovalRemark,
  620. applyPassportDt: that.datainfo.applyPassportDt,
  621. isApplyPassport: that.datainfo.isApplyPassport,
  622. applyPassportRemark: that.datainfo.applyPassportRemark,
  623. visaInformationDt: that.datainfo.visaInformationDt,
  624. isVisaInformation: that.datainfo.isVisaInformation,
  625. visaInformationRemark: that.datainfo.visaInformationRemark,
  626. visaCountryData: that.datainfo.visaCountryData,
  627. sendVisaDt: that.datainfo.sendVisaDt,
  628. isSendVisa: that.datainfo.isSendVisa,
  629. sendVisaRemark: that.datainfo.sendVisaRemark,
  630. issueVisaDt: that.datainfo.issueVisaDt,
  631. isIssueVisa: that.datainfo.isIssueVisa,
  632. issueVisaRemark: that.datainfo.issueVisaRemark,
  633. airTicketDt: that.datainfo.airTicketDt,
  634. isAirTicket: that.datainfo.isAirTicket,
  635. airTicketRemark: that.datainfo.airTicketRemark,
  636. hotelDt: that.datainfo.hotelDt,
  637. isHotel: that.datainfo.isHotel,
  638. hotelRemark: that.datainfo.hotelRemark,
  639. isSelectedAirportd: that.datainfo.isSelectedAirportd,
  640. isSelectedApprovalData: that.datainfo.isSelectedApprovalData,
  641. isSelectedIssueApproval: that.datainfo.isSelectedIssueApproval,
  642. isSelectedVisaInfo: that.datainfo.isSelectedVisaInfo,
  643. isSelectedSendVisa: that.datainfo.isSelectedSendVisa,
  644. isSelectedIssueVisa: that.datainfo.isSelectedIssueVisa,
  645. isSelectedAirTicket: that.datainfo.isSelectedAirTicket,
  646. isSelectedHotel: that.datainfo.isSelectedHotel,
  647. isSelectedPreTripMeeting: that.datainfo.isSelectedPreTripMeeting,
  648. isSelectedAirportdDropOff: that.datainfo.isSelectedAirportdDropOff,
  649. preTripMeetingDt: that.datainfo.preTripMeetingDt,
  650. isPreTripMeeting: that.datainfo.isPreTripMeeting,
  651. preTripMeetingRemark: that.datainfo.preTripMeetingRemark,
  652. airportdDropOffDt: that.datainfo.airportdDropOffDt,
  653. isAirportdDropOff: that.datainfo.isAirportdDropOff,
  654. airportdDropOffRemark: that.datainfo.airportdDropOffRemark,
  655. }
  656. }).then(function (res) {
  657. if (res.data.code == 200) {
  658. that.$message({
  659. message:res.data.msg ,
  660. type: 'success',
  661. offset:50
  662. });
  663. that.PostInvertedListInfo();
  664. }else{
  665. that.$message.error(res.data.msg);
  666. }
  667. }).catch(function (error) {
  668. that.$message.error(error);
  669. });
  670. },
  671. //导出倒推表
  672. PostInvertedListFileDownload() {
  673. var that = this
  674. var url = "/api/Groups/PostInvertedListUpdate"
  675. this.$axios({
  676. method: 'post',
  677. url: url,
  678. headers: {
  679. Authorization: 'Bearer ' + this.token
  680. },
  681. data: {
  682. portType: 1,
  683. isQuery:that.datainfo.isQuery,
  684. id: that.datainfo.id,
  685. diId: that.datainfo.diId,
  686. approvalDataDt: that.datainfo.approvalDataDt,
  687. isApprovalData: that.datainfo.isApprovalData,
  688. approvalDataRemark: that.datainfo.approvalDataRemark,
  689. approvalDt: that.datainfo.approvalDt,
  690. approvalType: that.datainfo.approvalType,
  691. isApproval: that.datainfo.isApproval,
  692. approvalRemark: that.datainfo.approvalRemark,
  693. issueApprovalDt: that.datainfo.issueApprovalDt,
  694. isIssueApproval: that.datainfo.isIssueApproval,
  695. issueApprovalRemark: that.datainfo.issueApprovalRemark,
  696. applyPassportDt: that.datainfo.applyPassportDt,
  697. isApplyPassport: that.datainfo.isApplyPassport,
  698. applyPassportRemark: that.datainfo.applyPassportRemark,
  699. visaInformationDt: that.datainfo.visaInformationDt,
  700. isVisaInformation: that.datainfo.isVisaInformation,
  701. visaInformationRemark: that.datainfo.visaInformationRemark,
  702. visaCountryData: that.datainfo.visaCountryData,
  703. sendVisaDt: that.datainfo.sendVisaDt,
  704. isSendVisa: that.datainfo.isSendVisa,
  705. sendVisaRemark: that.datainfo.sendVisaRemark,
  706. issueVisaDt: that.datainfo.issueVisaDt,
  707. isIssueVisa: that.datainfo.isIssueVisa,
  708. issueVisaRemark: that.datainfo.issueVisaRemark,
  709. airTicketDt: that.datainfo.airTicketDt,
  710. isAirTicket: that.datainfo.isAirTicket,
  711. airTicketRemark: that.datainfo.airTicketRemark,
  712. hotelDt: that.datainfo.hotelDt,
  713. isHotel: that.datainfo.isHotel,
  714. hotelRemark: that.datainfo.hotelRemark,
  715. isSelectedAirportd: that.datainfo.isSelectedAirportd,
  716. isSelectedApprovalData: that.datainfo.isSelectedApprovalData,
  717. isSelectedIssueApproval: that.datainfo.isSelectedIssueApproval,
  718. isSelectedVisaInfo: that.datainfo.isSelectedVisaInfo,
  719. isSelectedSendVisa: that.datainfo.isSelectedSendVisa,
  720. isSelectedIssueVisa: that.datainfo.isSelectedIssueVisa,
  721. isSelectedAirTicket: that.datainfo.isSelectedAirTicket,
  722. isSelectedHotel: that.datainfo.isSelectedHotel,
  723. isSelectedPreTripMeeting: that.datainfo.isSelectedPreTripMeeting,
  724. isSelectedAirportdDropOff: that.datainfo.isSelectedAirportdDropOff,
  725. preTripMeetingDt: that.datainfo.preTripMeetingDt,
  726. isPreTripMeeting: that.datainfo.isPreTripMeeting,
  727. preTripMeetingRemark: that.datainfo.preTripMeetingRemark,
  728. airportdDropOffDt: that.datainfo.airportdDropOffDt,
  729. isAirportdDropOff: that.datainfo.isAirportdDropOff,
  730. airportdDropOffRemark: that.datainfo.airportdDropOffRemark,
  731. }
  732. }).then(function (res) {
  733. if (res.data.code == 200) {
  734. that.$message({
  735. message:res.data.msg ,
  736. type: 'success',
  737. offset:50
  738. });
  739. that.PostInvertedListInfo();
  740. var urls = "/api/Groups/PostInvertedListFileDownload"
  741. that.$axios({
  742. method: 'post',
  743. url: urls,
  744. headers: {
  745. Authorization: 'Bearer ' + that.token
  746. },
  747. data: {
  748. portType: 1,
  749. diId: that.value
  750. }
  751. }).then(function (res) {
  752. if (res.data.code == 200) {
  753. that.$message({
  754. message:res.data.msg ,
  755. type: 'success',
  756. offset:50
  757. });
  758. window.open(res.data.data);
  759. }else{
  760. that.$message.error(res.data.msg);
  761. }
  762. }).catch(function (error) {
  763. that.$message.error(error);
  764. });
  765. }else{
  766. that.$message.error(res.data.msg);
  767. }
  768. }).catch(function (error) {
  769. that.$message.error(error);
  770. });
  771. },
  772. },
  773. filters: {
  774. capitalize: function (value) {
  775. value=value+'';
  776. return value.split(" ")[0]
  777. }
  778. },
  779. created(){
  780. this.GetGroupNameList()
  781. },
  782. mounted(){
  783. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  784. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  785. }
  786. }
  787. </script>
  788. <style>
  789. .backward-all{
  790. background-color: #fff;
  791. padding: 10px;
  792. box-shadow: 0 0 5px #0005;
  793. border-radius: 10px;
  794. height: 100%;
  795. min-height: 830px;
  796. min-width: 1550px;
  797. }
  798. .backward-head-li label{
  799. color: #606266;
  800. font-size: 15px;
  801. font-weight: 600;
  802. }
  803. .backward-head{
  804. display: flex;
  805. justify-content: space-between;
  806. }
  807. .backward-title{
  808. margin: 30px 0 ;
  809. text-align: center;
  810. }
  811. .backward-title-yi{
  812. color: #606266;
  813. font-size: 15px;
  814. font-weight: 600;
  815. margin-bottom: 20px;
  816. }
  817. .backward-title-er{
  818. color: #606266;
  819. font-size: 14px;
  820. font-weight: 600;
  821. }
  822. .backward-table-li{
  823. display: flex;
  824. border-top: 1px solid #ebeef5;
  825. }
  826. .backward-table-li:last-child{
  827. border-bottom: 1px solid #ebeef5;
  828. }
  829. .backward-li-span:nth-child(1){
  830. width: 3%;
  831. }
  832. .backward-li-span:nth-child(2){
  833. width: 15%;
  834. }
  835. .backward-li-span:nth-child(3){
  836. width: 20%;
  837. color: #606266;
  838. font-size: 14px;
  839. font-weight: 600;
  840. }
  841. .backward-li-span:nth-child(4){
  842. width: 62%;
  843. }
  844. .backward-li-span{
  845. border-left: 1px solid #ebeef5;
  846. padding: 10px;
  847. text-align: center;
  848. line-height: 54px;
  849. }
  850. .backward-li-span:last-child{
  851. border-right: 1px solid #ebeef5;
  852. }
  853. .backward-li-span .el-radio{
  854. font-size: 14px;
  855. margin-right: 6px;
  856. }
  857. .backward-li-span .el-radio__label{
  858. padding-left: 4px;
  859. }
  860. </style>