OpOfficialActivities.vue 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525
  1. <template>
  2. <div class="car_add visit-box">
  3. <div>
  4. <div class="communal-title">
  5. <div>{{ title }}</div>
  6. </div>
  7. <div class="ps-title">
  8. <span>PS:"请规范录入,未规范录入,造成公司损失或影响提成计算,需承担责任"</span>
  9. <!-- 客户名单 -->
  10. <el-popover
  11. placement="bottom"
  12. width="662"
  13. trigger="hover">
  14. <el-table max-height="600" border :data="rollcallarr">
  15. <el-table-column width="100" property="date" label="姓名">
  16. <template slot-scope="scope">
  17. {{ scope.row.lastName}}{{scope.row.firstName}}
  18. </template>
  19. </el-table-column>
  20. <el-table-column width="200" property="lastName" label="拼音">
  21. <template slot-scope="scope">
  22. {{ pinyingxing(scope.row.lastName) }}/{{ pinyingxing(scope.row.firstName) }}
  23. </template>
  24. </el-table-column>
  25. <el-table-column width="50" property="sex" label="性别">
  26. <template slot-scope="scope">
  27. {{ scope.row.sex==0?'男':'女'}}
  28. </template>
  29. </el-table-column>
  30. <el-table-column width="110" property="birthDay" label="生日">
  31. <template slot-scope="scope">
  32. {{ fgarr(scope.row.birthDay) }}
  33. </template>
  34. </el-table-column>
  35. <el-table-column width="200" property="idCardNo" label="身份证号码">
  36. <template slot-scope="scope">
  37. {{ scope.row.idCardNo }}
  38. </template>
  39. </el-table-column>
  40. </el-table>
  41. <span slot="reference" style="cursor: pointer;margin-left: 20px;">"移上查看客户名单"</span>
  42. </el-popover>
  43. </div>
  44. </div>
  45. <hr style='background-color:#5555; height:1px; border:none;margin: 8px 0;' />
  46. <div>
  47. <el-form :model="delegationInfo" label-width="100px" class="demo-ruleForm">
  48. <div style="display: flex;flex-wrap: wrap;">
  49. <div style="width: 385px;">
  50. <el-form-item label="团组名称:" label-width="160px">
  51. <el-select v-model="DiId" clearable filterable placeholder="团组选择" @change="DiIdChang"
  52. :disabled="isShow">
  53. <el-option v-for="item in delegationInfoList" :key="item.id" :label="item.teamName"
  54. :value="item.id">
  55. </el-option>
  56. </el-select>
  57. </el-form-item>
  58. </div>
  59. <div style="width: 385px;">
  60. <el-form-item label="团 号:" prop="tourCode" label-width="160px">
  61. <el-input placeholder="团号" v-model="delegationInfo.tourCode" :disabled="true">
  62. </el-input>
  63. </el-form-item>
  64. </div>
  65. <div style="width: 385px;">
  66. <el-form-item label="客户:" prop="clientName" label-width="160px">
  67. <el-input placeholder="客户" v-model="delegationInfo.clientName" :disabled="true">
  68. </el-input>
  69. </el-form-item>
  70. </div>
  71. <div style="width: 385px;">
  72. <el-form-item label="出访国家:" prop="visitCountry" label-width="160px">
  73. <el-input placeholder="出访国家" v-model="delegationInfo.visitCountry" :disabled="true">
  74. </el-input>
  75. </el-form-item>
  76. </div>
  77. </div>
  78. </el-form>
  79. <el-form :model="OpOfficialActivitiesDto" ref="OpOfficialActivitiesDto" :rules="OpOfficialActivitiesRules"
  80. label-width="100px" class="demo-ruleForm">
  81. <div style="display: flex;flex-wrap: wrap;">
  82. <div style="width: 385px;">
  83. <el-form-item label="公务形式:" prop="officialForm" label-width="160px">
  84. <el-select @change="Officchange" v-model="OpOfficialActivitiesDto.officialForm" clearable filterable placeholder="公务形式">
  85. <el-option v-for="item in OfficialFormList" :key="item.id" :label="item.name" :value="item.id">
  86. </el-option>
  87. </el-select>
  88. </el-form-item>
  89. </div>
  90. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  91. <el-form-item label="公务机构来源:" prop="officialForm" label-width="160px">
  92. <el-select v-model="OpOfficialActivitiesDto.dataSource" clearable filterable placeholder="公务机构来源">
  93. <el-option v-for="item in dataSourceList" :key="item.id" :label="item.name" :value="item.id">
  94. </el-option>
  95. </el-select>
  96. </el-form-item>
  97. </div>
  98. <div style="width: 385px;">
  99. <el-form-item label="国家:" prop="country" label-width="160px">
  100. <el-input clearable placeholder="国家" v-model="OpOfficialActivitiesDto.country">
  101. </el-input>
  102. </el-form-item>
  103. </div>
  104. <div style="width: 385px;">
  105. <el-form-item label="城市:" prop="area" label-width="160px">
  106. <el-input clearable placeholder="城市" v-model="OpOfficialActivitiesDto.area">
  107. </el-input>
  108. </el-form-item>
  109. </div>
  110. <div style="width: 385px;">
  111. <el-form-item label="公务单位:" prop="client" label-width="160px">
  112. <el-input clearable placeholder="公务单位" v-model="OpOfficialActivitiesDto.client">
  113. </el-input>
  114. </el-form-item>
  115. </div>
  116. <div style="width: 385px;">
  117. <el-form-item label="公务日期:" prop="date" label-width="160px">
  118. <el-date-picker
  119. value-format="yyyy-MM-dd"
  120. type="date"
  121. v-model="OpOfficialActivitiesDto.date"
  122. placeholder="选择日期">
  123. </el-date-picker>
  124. </el-form-item>
  125. </div>
  126. <div style="width: 385px;">
  127. <el-form-item label="公务时刻:" prop="time" label-width="160px">
  128. <el-time-picker v-model="OpOfficialActivitiesDto.time" format='HH:mm' value-format="HH:mm"
  129. placeholder="公务时刻">
  130. </el-time-picker>
  131. </el-form-item>
  132. </div>
  133. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  134. <el-form-item label="邀请方:" prop="type" label-width="160px">
  135. <el-select v-model="OpOfficialActivitiesDto.type" clearable filterable placeholder="邀请方选择">
  136. <el-option v-for="item in yqfarr" :key="item.id" :label="item.name"
  137. :value="item.id">
  138. </el-option>
  139. </el-select>
  140. <!-- <el-radio-group v-model="OpOfficialActivitiesDto.type">
  141. <el-radio :label=1>是</el-radio>
  142. <el-radio :label=0>否</el-radio>
  143. </el-radio-group> -->
  144. </el-form-item>
  145. </div>
  146. <!-- </div>
  147. <div style="display: flex;flex-wrap: wrap;"> -->
  148. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  149. <el-form-item label="公务方联系人职务:" prop="job" label-width="160px">
  150. <el-input clearable placeholder="公务方联系人职务" v-model="OpOfficialActivitiesDto.job">
  151. </el-input>
  152. </el-form-item>
  153. </div>
  154. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  155. <el-form-item label="公务方联系人:" prop="contact" label-width="160px">
  156. <el-input clearable placeholder="公务方联系人" v-model="OpOfficialActivitiesDto.contact">
  157. </el-input>
  158. </el-form-item>
  159. </div>
  160. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  161. <el-form-item label="电话:" prop="tel" label-width="160px">
  162. <el-input clearable placeholder="电话" v-model="OpOfficialActivitiesDto.tel">
  163. </el-input>
  164. </el-form-item>
  165. </div>
  166. <!-- </div>
  167. <div style="display: flex;flex-wrap: wrap;"> -->
  168. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  169. <el-form-item label="着装要求:" prop="dresscode" label-width="160px">
  170. <el-input clearable placeholder="着装要求" v-model="OpOfficialActivitiesDto.dresscode">
  171. </el-input>
  172. </el-form-item>
  173. </div>
  174. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  175. <el-form-item label="涉及领域:" prop="field" label-width="160px">
  176. <el-input clearable placeholder="涉及领域" v-model="OpOfficialActivitiesDto.field">
  177. </el-input>
  178. </el-form-item>
  179. </div>
  180. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  181. <el-form-item label="需要翻译:" prop="isNeedTrans" label-width="160px">
  182. <el-radio-group v-model="OpOfficialActivitiesDto.isNeedTrans">
  183. <el-radio :label=1>是</el-radio>
  184. <el-radio :label=0>否</el-radio>
  185. </el-radio-group>
  186. </el-form-item>
  187. </div>
  188. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  189. <el-form-item prop="translatorInfo.name" label="翻译人员:" label-width="160px">
  190. <!-- <el-select
  191. v-model="OpOfficialActivitiesDto.translatorIdItem"
  192. multiple
  193. collapse-tags
  194. placeholder="请选择">
  195. <el-option
  196. v-for="item in restaurants"
  197. :key="item.id"
  198. :label="item.name"
  199. :value="item.id">
  200. </el-option>
  201. </el-select> -->
  202. <el-autocomplete
  203. style="width: 100%;"
  204. class="inline-input"
  205. v-model="OpOfficialActivitiesDto.translatorInfo.name"
  206. :fetch-suggestions="querySearch"
  207. placeholder="请输入内容"
  208. @select="handleSelect"
  209. ></el-autocomplete>
  210. <!-- <el-input clearable placeholder="翻译人员" v-model="OpOfficialActivitiesDto.translators">
  211. </el-input> -->
  212. </el-form-item>
  213. </div>
  214. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  215. <el-form-item prop="translatorInfo.area" label="翻译人员地区:" label-width="160px">
  216. <el-input clearable placeholder="翻译人员地区" v-model="OpOfficialActivitiesDto.translatorInfo.area">
  217. </el-input>
  218. </el-form-item>
  219. </div>
  220. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  221. <el-form-item prop="translatorInfo.sex" label="翻译性别:" label-width="160px">
  222. <el-radio-group v-model="OpOfficialActivitiesDto.translatorInfo.sex">
  223. <el-radio :label=0>未设置</el-radio>
  224. <el-radio :label=1>男</el-radio>
  225. <el-radio :label=2>女</el-radio>
  226. </el-radio-group>
  227. </el-form-item>
  228. </div>
  229. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  230. <el-form-item prop="translatorInfo.tel" label="翻译联系电话:" label-width="160px">
  231. <el-input clearable placeholder="翻译联系电话" v-model="OpOfficialActivitiesDto.translatorInfo.tel">
  232. </el-input>
  233. </el-form-item>
  234. </div>
  235. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  236. <el-form-item prop="translatorInfo.email" label="翻译邮箱号:" label-width="160px">
  237. <el-input clearable placeholder="翻译邮箱号" v-model="OpOfficialActivitiesDto.translatorInfo.email">
  238. </el-input>
  239. </el-form-item>
  240. </div>
  241. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  242. <el-form-item prop="translatorInfo.wechatNo" label="翻译微信号:" label-width="160px">
  243. <el-input clearable placeholder="翻译微信号" v-model="OpOfficialActivitiesDto.translatorInfo.wechatNo">
  244. </el-input>
  245. </el-form-item>
  246. </div>
  247. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  248. <el-form-item prop="translatorInfo.otherSocialAccounts" label="翻译其他账号:" label-width="160px">
  249. <el-input clearable placeholder="翻译其他账号" v-model="OpOfficialActivitiesDto.translatorInfo.otherSocialAccounts">
  250. </el-input>
  251. </el-form-item>
  252. </div>
  253. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  254. <el-form-item prop="translatorInfo.language" label="翻译语种:" label-width="160px">
  255. <el-input clearable placeholder="翻译语种" v-model="OpOfficialActivitiesDto.translatorInfo.language">
  256. </el-input>
  257. </el-form-item>
  258. </div>
  259. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  260. <el-form-item prop="translatorInfo.price" label="翻译费用:" label-width="160px">
  261. <el-input-number style="width:100%" :precision="2" placeholder="翻译费用" v-model="OpOfficialActivitiesDto.translatorInfo.price"
  262. :controls='false'></el-input-number>
  263. </el-form-item>
  264. </div>
  265. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337&&OpOfficialActivitiesDto.isNeedTrans==1" style="width: 385px;">
  266. <el-form-item prop="translatorInfo.currency" label="翻译币种:" label-width="160px">
  267. <el-select filterable v-model="OpOfficialActivitiesDto.translatorInfo.currency" placeholder="请选择币种">
  268. <el-option v-for="(item,index) in currencyarr" :key="index" :label="item.name"
  269. :value="item.id"></el-option>
  270. </el-select>
  271. </el-form-item>
  272. </div>
  273. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  274. <el-form-item label="是否付费:" prop="isPay" label-width="160px">
  275. <el-radio-group v-model="OpOfficialActivitiesDto.isPay">
  276. <el-radio :label=1>是</el-radio>
  277. <el-radio :label=0>否</el-radio>
  278. </el-radio-group>
  279. </el-form-item>
  280. </div>
  281. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  282. <el-form-item label="是否报批:" prop="type" label-width="160px">
  283. <el-radio-group v-model="OpOfficialActivitiesDto.isSubmitApproval">
  284. <el-radio :label=1>是</el-radio>
  285. <el-radio :label=0>否</el-radio>
  286. </el-radio-group>
  287. </el-form-item>
  288. </div>
  289. <!-- <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  290. <el-form-item label="性质:" prop="nature" label-width="160px">
  291. <el-input clearable placeholder="性质" v-model="OpOfficialActivitiesDto.nature">
  292. </el-input>
  293. </el-form-item>
  294. </div> -->
  295. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  296. <el-form-item label="邮箱号/微信号:" prop="emailOrWeChat" label-width="160px">
  297. <el-input clearable placeholder="邮箱号/微信号" v-model="OpOfficialActivitiesDto.emailOrWeChat">
  298. </el-input>
  299. </el-form-item>
  300. </div>
  301. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 385px;">
  302. <el-form-item label="网址:" prop="website" label-width="160px">
  303. <el-input clearable placeholder="网址" v-model="OpOfficialActivitiesDto.website">
  304. </el-input>
  305. </el-form-item>
  306. </div>
  307. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 770px;">
  308. <el-form-item label="公务地址:" prop="address" label-width="160px">
  309. <el-input type="textarea" :rows="3" placeholder="公务地址"
  310. v-model="OpOfficialActivitiesDto.address"></el-input>
  311. </el-form-item>
  312. </div>
  313. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 770px;">
  314. <el-form-item label="公务方背景:" prop="setting" label-width="160px">
  315. <el-input
  316. type="textarea"
  317. :rows="3"
  318. placeholder="公务方背景"
  319. v-model="OpOfficialActivitiesDto.setting">
  320. </el-input>
  321. </el-form-item>
  322. </div>
  323. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 770px;">
  324. <el-form-item style="position: relative;" label="公务请示范例:" label-width="160px">
  325. <el-input @blur="reqSampleblur" @focus="PostOfficialActivitiesReqReqSampleTips" type="textarea" :rows="3" placeholder="公务请示范例" v-model="OpOfficialActivitiesDto.reqSample">
  326. </el-input>
  327. <div v-show="reqSampleArrpd" class="reqSampleArr-ul">
  328. <div @click="reqSampleArrli(item)" class="reqSampleArr-li" v-for="(item,index) in reqSampleArr" :key="index">
  329. {{'['+item.teamName+']('+item.client+') '+item.reqSample}}
  330. </div>
  331. </div>
  332. </el-form-item>
  333. </div>
  334. <!-- </div>
  335. <div style="display: flex;"> -->
  336. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width: 770px;">
  337. <el-form-item label="暂定议程:" prop="trip" label-width="160px">
  338. <el-input type="textarea" :rows="3" placeholder="暂定议程"
  339. v-model="OpOfficialActivitiesDto.trip"></el-input>
  340. </el-form-item>
  341. </div>
  342. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width:770px;">
  343. <el-form-item label="参会人员:" prop="attendees" label-width="160px">
  344. <el-input type="textarea" :rows="3" placeholder="参会人员"
  345. v-model="OpOfficialActivitiesDto.attendees"></el-input>
  346. </el-form-item>
  347. </div>
  348. <div style="width:770px;">
  349. <el-form-item label="备注:" prop="remark" label-width="160px">
  350. <el-input type="textarea" :rows="3" placeholder="备注"
  351. v-model="OpOfficialActivitiesDto.remark"></el-input>
  352. </el-form-item>
  353. </div>
  354. <div v-if="OpOfficialActivitiesDto.officialForm!=384&&OpOfficialActivitiesDto.officialForm!=1337" style="width:770px;">
  355. <el-form-item label="邮件截图:" label-width="160px">
  356. <span style="display: inline-block;position: absolute;left: -82px;color: red;">*</span>
  357. <!-- <el-upload
  358. ref="Emailscreenshotref"
  359. :action="Emailscreenshoturl"
  360. :data="Emailscreenshotdata"
  361. :show-file-list="true"
  362. :auto-upload="false"
  363. :file-list="Emailscreenshot"
  364. :on-change="Emailscreenshotchange"
  365. :multiple="true"
  366. name="files">
  367. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  368. <el-button style="margin-left: 10px;" size="small" type="success"
  369. @click="UploadEmailscreenshot">上传</el-button>
  370. </el-upload> -->
  371. <el-upload
  372. accept="image/jpeg,image/png"
  373. class="pop-upload"
  374. ref="upload"
  375. action=""
  376. :file-list="fileList"
  377. :auto-upload="false"
  378. :multiple="true"
  379. :on-change="handleChange"
  380. :on-remove="handleRemove"
  381. :on-preview="handlePreview"
  382. :before-remove="beforeRemove"
  383. name="files"
  384. >
  385. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  386. <span style="color: red;font-size: 11px;">* 需上传,对方初次回复的邮件/微信截图和最后确认会面的信息截图(截图显示对方有效邮箱地址)</span>
  387. <!-- <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button> -->
  388. </el-upload>
  389. </el-form-item>
  390. </div>
  391. </div>
  392. <!-- <div>
  393. <div>
  394. <div class="communal-title">
  395. <div>公务文件</div>
  396. </div>
  397. </div>
  398. <span style="color: red;">上传、删除文件时请谨慎!!!</span>
  399. <hr style='background-color:#5555; height:1px; border:none;' />
  400. <div style="display: flex;">
  401. <div style="width: 33%;">
  402. 公务方简介:
  403. <el-upload :file-list="uploadFiles1" ref="upload1" :on-success="upLoadSuccess1" :on-error="upLoadError1"
  404. :before-remove="beforeRemove1" :on-change="onChange1" :limit="1" :on-exceed="exceed1"
  405. :action="uploadURL" :headers="headers1" :auto-upload="false" :on-preview="onPreview1">
  406. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  407. <el-button style="margin-left: 10px;" size="small" type="success"
  408. @click="submitUpload1">上传</el-button>
  409. </el-upload>
  410. </div>
  411. <div style="width: 33%;">
  412. 公务活动图片:
  413. <el-upload :file-list="uploadFiles2" ref="upload2" :on-success="upLoadSuccess2" :on-error="upLoadError2"
  414. :before-remove="beforeRemove2" :on-change="onChange2" :limit="1" :on-exceed="exceed2"
  415. :action="uploadURL" :headers="headers2" :auto-upload="false" :on-preview="onPreview2">
  416. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  417. <el-button style="margin-left: 10px;" size="small" type="success"
  418. @click="submitUpload2">上传</el-button>
  419. </el-upload>
  420. </div>
  421. <div style="width: 33%;">
  422. 发票:
  423. <el-upload :file-list="uploadFiles3" ref="upload3" :on-success="upLoadSuccess3" :on-error="upLoadError3"
  424. :before-remove="beforeRemove3" :on-change="onChange3" :limit="1" :on-exceed="exceed3"
  425. :action="uploadURL" :headers="headers3" :auto-upload="false" :on-preview="onPreview3">
  426. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  427. <el-button style="margin-left: 10px;" size="small" type="success"
  428. @click="submitUpload3">上传</el-button>
  429. </el-upload>
  430. </div>
  431. </div>
  432. </div> -->
  433. <el-form-item>
  434. <div style="text-align: right;">
  435. <el-button type="primary" @click="addBtn">保存</el-button>
  436. <el-button v-if="btnPermissions&&confirmTheInvitation==0" @click="OfficialActivitiesInviteOperation(1)" type="primary">复核确认</el-button>
  437. <el-button v-if="btnPermissions&&confirmTheInvitation==1" @click="OfficialActivitiesInviteOperation(0)" type="primary">取消确认</el-button>
  438. <el-button @click="returnbtn">取消</el-button>
  439. </div>
  440. </el-form-item>
  441. </el-form>
  442. </div>
  443. </div>
  444. </template>
  445. <script>
  446. import { pinyin } from 'pinyin-pro';
  447. var validateBudget = (rule, value, callback) => {
  448. if (value.split('@')[0].includes('info')) {
  449. callback(new Error('请输正确格式!'));
  450. }else {
  451. callback();
  452. }
  453. }
  454. export default {
  455. data() {
  456. return {
  457. confirmTheInvitation:0,
  458. title: "新增公务出访客户资料",
  459. token: '',
  460. userId: 0,
  461. id: '',
  462. DiId: '',
  463. isShow: false,
  464. delegationInfo: {},
  465. delegationInfoList: [],//团组下拉框
  466. OfficialFormList: [],//公务形式下拉框
  467. dataSourceList: [],//来源下拉框
  468. deleFile: [],//文件数据
  469. headers: {
  470. Authorization: JSON.parse(localStorage.getItem('userinif')).token,
  471. TypeName: "A"
  472. },
  473. currencyarr:[],
  474. OpOfficialActivitiesDto: {
  475. status: 0,
  476. id: 0,
  477. diId: "",
  478. type: "",
  479. client: "",//
  480. date: "",//
  481. time: "",//
  482. address: "",
  483. contact: "",
  484. job: "",
  485. tel: "",
  486. officialForm: "",
  487. setting: "",
  488. dresscode: "",
  489. attendees: "",
  490. isNeedTrans: 0,
  491. translatorIdItem: [],
  492. language: "",
  493. nature: "",
  494. emailOrWeChat: "",
  495. website: "",
  496. trip: "",
  497. createUserId: 0,
  498. isPay:0,
  499. isSubmitApproval:0,
  500. remark: "",//
  501. country: "",//
  502. area: "",//
  503. field: "",
  504. reqSample: "",
  505. dataSource:"",//来源
  506. translatorInfo:{
  507. id:"",
  508. area: "",
  509. name: "",
  510. sex: 1,
  511. tel: "",
  512. email: "",
  513. wechatNo: "",
  514. otherSocialAccounts: "",
  515. language: "",
  516. price: "",
  517. currency: "",
  518. }
  519. },
  520. reqSampleArr:[],
  521. reqSampleArrpd:false,
  522. rollcallarr:[],
  523. OpOfficialActivitiesRules: {
  524. officialForm: [
  525. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  526. { required: true, message: '该信息为必填信息', trigger: 'change' }
  527. ],
  528. country: [
  529. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  530. ],
  531. area: [
  532. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  533. ],
  534. "translatorInfo.area": [
  535. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  536. ],
  537. "translatorInfo.sex": [
  538. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  539. ],
  540. "translatorInfo.name": [
  541. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  542. { required: true, message: '该信息为必填信息', trigger: 'change' },
  543. ],
  544. "translatorInfo.tel": [
  545. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  546. ],
  547. "translatorInfo.email": [
  548. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  549. ],
  550. "translatorInfo.wechatNo": [
  551. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  552. ],
  553. "translatorInfo.otherSocialAccounts": [
  554. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  555. ],
  556. "translatorInfo.language": [
  557. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  558. ],
  559. "translatorInfo.price": [
  560. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  561. ],
  562. "translatorInfo.currency": [
  563. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  564. ],
  565. inviteCosts: [
  566. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  567. { required: true, message: '该信息为必填信息', trigger: 'change' },
  568. ],
  569. client: [
  570. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  571. { required: true, message: '该信息为必填信息', trigger: 'change' },
  572. ],
  573. date: [
  574. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  575. { required: true, message: '该信息为必填信息', trigger: 'change' },
  576. ],
  577. time: [
  578. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  579. { required: true, message: '该信息为必填信息', trigger: 'change' },
  580. ],
  581. address: [
  582. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  583. { required: true, message: '该信息为必填信息', trigger: 'change' },
  584. ],
  585. contact: [
  586. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  587. { required: true, message: '该信息为必填信息', trigger: 'change' },
  588. ],
  589. job: [
  590. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  591. { required: true, message: '该信息为必填信息', trigger: 'change' },
  592. ],
  593. tel: [
  594. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  595. { required: true, message: '该信息为必填信息', trigger: 'change' },
  596. ],
  597. dresscode: [
  598. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  599. { required: true, message: '该信息为必填信息', trigger: 'change' },
  600. ],
  601. field: [
  602. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  603. { required: true, message: '该信息为必填信息', trigger: 'change' },
  604. ],
  605. language: [
  606. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  607. { required: true, message: '该信息为必填信息', trigger: 'change' },
  608. ],
  609. setting: [
  610. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  611. { required: true, message: '该信息为必填信息', trigger: 'change' },
  612. ],
  613. nature: [
  614. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  615. { required: true, message: '该信息为必填信息', trigger: 'change' },
  616. ],
  617. emailOrWeChat: [
  618. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  619. { required: true, message: '该信息为必填信息', trigger: 'change' },
  620. {validator: validateBudget, trigger: 'blur'},
  621. ],
  622. website: [
  623. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  624. { required: true, message: '该信息为必填信息', trigger: 'change' },
  625. ],
  626. type: [
  627. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  628. { required: true, message: '该信息为必填信息', trigger: 'change' },
  629. ],
  630. fileList: [
  631. { required: true, message: '该信息为必填信息', trigger: 'change' },
  632. ],
  633. isPay:[
  634. { required: true, message: '该信息为必填信息', trigger: 'blur' },
  635. { required: true, message: '该信息为必填信息', trigger: 'change' },
  636. ],
  637. },
  638. uploadURL: "http://localhost:5256/api/Resource/UploadOfficialActivities",
  639. uploadFiles1: [],
  640. uploadFiles2: [],
  641. uploadFiles3: [],
  642. Emailscreenshot:[],
  643. Emailscreenshoturl:'http://132.232.92.186:8888/api/Resource/OfficialActivitiesUploadFiles',
  644. Emailscreenshotdata:{
  645. id:0,
  646. diId:0,
  647. currUserId:0,
  648. },
  649. Emailscreenshotheaders:{
  650. Authorization:"Content-Type:multipart/form-data"
  651. },
  652. headers1: {
  653. Authorization: JSON.parse(localStorage.getItem('userinif')).token,
  654. Type: "1",
  655. DiId: 0,
  656. CreateUserId: 0,
  657. },
  658. headers2: {
  659. Authorization: JSON.parse(localStorage.getItem('userinif')).token,
  660. Type: "2",
  661. DiId: 0,
  662. CreateUserId: 0,
  663. },
  664. headers3: {
  665. Authorization: JSON.parse(localStorage.getItem('userinif')).token,
  666. Type: "3",
  667. DiId: 0,
  668. CreateUserId: 0,
  669. },
  670. yqfarr:[],
  671. gwcfPermissions:[],
  672. btnPermissions:false,
  673. fileList:[],
  674. restaurants: [],
  675. }
  676. },
  677. methods: {
  678. //拼音
  679. pinyingxing(val){
  680. return pinyin(val, { toneType: 'none' }).toUpperCase();
  681. },
  682. //fenge
  683. fgarr(val){
  684. val=val+""
  685. return val.split(' ')[0]
  686. },
  687. querySearch(queryString, cb) {
  688. var restaurants = this.restaurants;
  689. var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
  690. // 调用 callback 返回建议列表的数据
  691. cb(results);
  692. },
  693. createFilter(queryString) {
  694. return (restaurant) => {
  695. return restaurant.value.replace(" ", "").toLowerCase().match(queryString.toLowerCase());
  696. };
  697. },
  698. handleSelect(item) {
  699. console.log(item);
  700. console.log(this.OpOfficialActivitiesDto.name);
  701. this.OpOfficialActivitiesDto.translatorInfo={
  702. id:"",
  703. area: "",
  704. name: "",
  705. sex: 1,
  706. tel: "",
  707. email: "",
  708. wechatNo: "",
  709. otherSocialAccounts: "",
  710. language: "",
  711. price: "",
  712. currency: "",
  713. };
  714. this.OpOfficialActivitiesDto.translatorInfo.id=item.id;
  715. this.OpOfficialActivitiesDto.translatorInfo.area=item.area;
  716. this.OpOfficialActivitiesDto.translatorInfo.name=item.value;
  717. this.OpOfficialActivitiesDto.translatorInfo.sex=item.sex;
  718. this.OpOfficialActivitiesDto.translatorInfo.tel=item.tel;
  719. this.OpOfficialActivitiesDto.translatorInfo.email=item.email;
  720. this.OpOfficialActivitiesDto.translatorInfo.wechatNo=item.wechatNo;
  721. this.OpOfficialActivitiesDto.translatorInfo.otherSocialAccounts=item.otherSocialAccounts;
  722. this.OpOfficialActivitiesDto.translatorInfo.language=item.language;
  723. this.OpOfficialActivitiesDto.translatorInfo.price=item.price;
  724. this.OpOfficialActivitiesDto.translatorInfo.currency=item.currency;
  725. },
  726. //日期处理(日)
  727. TimeProcessingri(val){
  728. let datetime=new Date(val)
  729. let newsyear=datetime.getFullYear();
  730. let newsMonth=datetime.getMonth() + 1<10?'0'+(datetime.getMonth() + 1):datetime.getMonth() + 1;
  731. let newsday=datetime.getDate()<10?'0'+datetime.getDate():datetime.getDate();
  732. return newsyear+ '-' +newsMonth+ '-' + newsday;
  733. },
  734. //获取客户名单info
  735. PostTourClientListByDiId(val) {
  736. this.rollcallarr=[];
  737. var that = this
  738. var url = "/api/Groups/PostTourClientListByDiId"
  739. this.$axios({
  740. method: 'post',
  741. url: url,
  742. headers: {
  743. Authorization: 'Bearer ' + that.token
  744. },
  745. data: {
  746. portType:1,
  747. diid: val?val:that.DiId,
  748. pageId:104,
  749. userId:233
  750. }
  751. }).then(function (res) {
  752. if (res.data.code == 200) {
  753. that.rollcallarr=res.data.data;
  754. } else {
  755. that.$message.error(res.data.msg);
  756. }
  757. })
  758. },
  759. //团组下拉框
  760. GetGroupAllList() {
  761. var url = "/api/Resource/GetGroupAllList"
  762. var that = this
  763. this.$axios({
  764. method: 'post',
  765. url: url,
  766. headers: {
  767. Authorization: 'Bearer ' + this.token
  768. },
  769. data: {
  770. diid: that.DiId
  771. }
  772. }).then(function (res) {
  773. if (res.data.code == 200) {
  774. let datainfo=res.data.data;
  775. that.currencyarr=datainfo.currencyData;
  776. // that.restaurants = res.data.data.translatorData;
  777. that.restaurants= datainfo.translatorData.map((terminal) => {
  778. return {
  779. id:terminal.id,
  780. value:terminal.name,
  781. area:terminal.area,
  782. sex:terminal.sex,
  783. tel:terminal.tel,
  784. email:terminal.email,
  785. wechatNo:terminal.wechatNo,
  786. otherSocialAccounts:terminal.otherSocialAccounts,
  787. language:terminal.language,
  788. price:terminal.price,
  789. currency:terminal.currency,
  790. };
  791. });
  792. that.deleFile = res.data.data.deleFile;
  793. that.deleFile.forEach(function (item) {
  794. if (item.kind == 1) {
  795. that.uploadFiles1.push({
  796. name: item.fileName,
  797. url: 'http://localhost:5256/Office/GrpFile/商邀相关文件/',
  798. id: item.id
  799. });
  800. } else if (item.kind == 2) {
  801. that.uploadFiles2.push({
  802. name: item.fileName,
  803. url: 'http://localhost:5256/Office/GrpFile/商邀相关文件/',
  804. id: item.id
  805. });
  806. }
  807. else if (item.kind == 3) {
  808. that.uploadFiles3.push({
  809. name: item.fileName,
  810. url: 'http://localhost:5256/Office/GrpFile/商邀相关文件/',
  811. id: item.id
  812. });
  813. }
  814. });
  815. that.delegationInfoList = res.data.data.delegation;
  816. that.OfficialFormList = res.data.data.setData;
  817. that.dataSourceList = res.data.data.dataSource;
  818. if (that.OfficialFormList.length != 0) {
  819. if(that.id!=that.id){
  820. that.OpOfficialActivitiesDto.officialForm = that.OfficialFormList[0].id
  821. }
  822. }
  823. for (let index = 0; index < that.delegationInfoList.length; index++) {
  824. if (that.delegationInfoList[index].id == parseInt(that.DiId)) {
  825. that.delegationInfo = that.delegationInfoList[index];
  826. break;
  827. }
  828. }
  829. }
  830. }).catch(function (error) {
  831. // that.$message.error("网络错误,请稍后重试");
  832. });
  833. },
  834. //UploadEmailscreenshot
  835. UploadEmailscreenshot(){
  836. console.log(file, fileList);
  837. this.Emailscreenshotdata.diId=this.DiId;
  838. this.Emailscreenshotdata.currUserId=this.userId;
  839. this.submitUpload()
  840. },
  841. //获取邀请方
  842. QuerySetData(){
  843. var that = this;
  844. var url = "/api/System/QuerySetData"
  845. this.$axios({
  846. method: 'post',
  847. url: url,
  848. headers: {
  849. Authorization: 'Bearer ' + that.token
  850. },
  851. data: {
  852. dataType:85
  853. }
  854. }).then(function (res) {
  855. if (res.data.code == 200) {
  856. that.yqfarr=res.data.data;
  857. console.log(that.yqfarr);
  858. } else {
  859. that.$message.error(res.data.msg);
  860. }
  861. })
  862. },
  863. Emailscreenshotchange(file, fileList){
  864. console.log(file, fileList);
  865. },
  866. //获取公务请示范例提示
  867. PostOfficialActivitiesReqReqSampleTips(){
  868. var that = this;
  869. var url = "/api/Resource/PostOfficialActivitiesReqReqSampleTips"
  870. this.$axios({
  871. method: 'post',
  872. url: url,
  873. headers: {
  874. Authorization: 'Bearer ' + that.token
  875. },
  876. data: {
  877. country:that.OpOfficialActivitiesDto.country,
  878. area: that.OpOfficialActivitiesDto.area,
  879. client: that.OpOfficialActivitiesDto.client
  880. }
  881. }).then(function (res) {
  882. if (res.data.code == 200) {
  883. console.log(res)
  884. that.reqSampleArrpd=true
  885. that.reqSampleArr=res.data.data;
  886. // that.$message({
  887. // message: res.data.msg,
  888. // type: 'success'
  889. // });
  890. } else {
  891. that.$message.error(res.data.msg);
  892. }
  893. })
  894. },
  895. reqSampleblur(){
  896. // setTimeout(this.reqSampleArrpd=false,2000)
  897. setTimeout(() => {
  898. this.reqSampleArrpd=false
  899. }, 150);
  900. },
  901. DiIdChang(val) {
  902. for (let index = 0; index < this.delegationInfoList.length; index++) {
  903. if (this.delegationInfoList[index].id == parseInt(this.DiId)) {
  904. this.delegationInfo = this.delegationInfoList[index];
  905. break;
  906. }
  907. }
  908. this.PostTourClientListByDiId(val);
  909. },
  910. reqSampleArrli(val){
  911. console.log(val);
  912. this.OpOfficialActivitiesDto.reqSample=val.reqSample;
  913. this.reqSampleArrpd=false;
  914. },
  915. QueryOfficialActivitiesById() {
  916. var url = "/api/Resource/QueryOfficialActivitiesById"
  917. var that = this
  918. this.$axios({
  919. method: 'post',
  920. url: url,
  921. headers: {
  922. Authorization: 'Bearer ' + this.token
  923. },
  924. data: {
  925. Id: that.id,
  926. DiId: that.DiId,
  927. }
  928. }).then(function (res) {
  929. if (res.data.code == 200) {
  930. var dataList = res.data.data;
  931. that.OpOfficialActivitiesDto.id = dataList.id;
  932. that.OpOfficialActivitiesDto.diId = dataList.diId;
  933. that.OpOfficialActivitiesDto.type = dataList.type;
  934. that.OpOfficialActivitiesDto.client = dataList.client;
  935. that.OpOfficialActivitiesDto.date = dataList.date;
  936. that.OpOfficialActivitiesDto.time = dataList.time;;
  937. that.OpOfficialActivitiesDto.address = dataList.address;
  938. that.OpOfficialActivitiesDto.contact = dataList.contact;
  939. that.OpOfficialActivitiesDto.job = dataList.job;
  940. that.OpOfficialActivitiesDto.tel = dataList.tel;
  941. that.OpOfficialActivitiesDto.officialForm = dataList.officialForm;
  942. that.OpOfficialActivitiesDto.setting = dataList.setting;
  943. that.OpOfficialActivitiesDto.dresscode = dataList.dresscode;
  944. that.OpOfficialActivitiesDto.attendees = dataList.attendees;
  945. that.OpOfficialActivitiesDto.isNeedTrans = dataList.isNeedTrans;
  946. that.OpOfficialActivitiesDto.translatorIdItem = dataList.translatorIdItem;
  947. that.OpOfficialActivitiesDto.language = dataList.language;
  948. that.OpOfficialActivitiesDto.nature = dataList.nature;
  949. that.OpOfficialActivitiesDto.emailOrWeChat = dataList.emailOrWeChat;
  950. that.OpOfficialActivitiesDto.website = dataList.website;
  951. that.OpOfficialActivitiesDto.trip = dataList.trip;
  952. that.OpOfficialActivitiesDto.createUserId = dataList.createUserId;
  953. that.OpOfficialActivitiesDto.remark = dataList.remark;
  954. that.OpOfficialActivitiesDto.isSubmitApproval = dataList.isSubmitApproval;
  955. that.OpOfficialActivitiesDto.isPay = dataList.isPay;
  956. that.OpOfficialActivitiesDto.country = dataList.country;
  957. that.OpOfficialActivitiesDto.area = dataList.area;
  958. that.OpOfficialActivitiesDto.field = dataList.field;
  959. that.OpOfficialActivitiesDto.reqSample = dataList.reqSample;
  960. that.confirmTheInvitation=dataList.confirmTheInvitation;
  961. that.OpOfficialActivitiesDto.dataSource = dataList.dataSource;//来源
  962. that.OpOfficialActivitiesDto.translatorInfo.id = dataList.translatorInfo.id;//翻译详细
  963. that.OpOfficialActivitiesDto.translatorInfo.area = dataList.translatorInfo.area;
  964. that.OpOfficialActivitiesDto.translatorInfo.name = dataList.translatorInfo.name;
  965. that.OpOfficialActivitiesDto.translatorInfo.sex = dataList.translatorInfo.sex;
  966. that.OpOfficialActivitiesDto.translatorInfo.tel = dataList.translatorInfo.tel;
  967. that.OpOfficialActivitiesDto.translatorInfo.email = dataList.translatorInfo.email;
  968. that.OpOfficialActivitiesDto.translatorInfo.wechatNo = dataList.translatorInfo.wechatNo;
  969. that.OpOfficialActivitiesDto.translatorInfo.otherSocialAccounts = dataList.translatorInfo.otherSocialAccounts;
  970. that.OpOfficialActivitiesDto.translatorInfo.language = dataList.translatorInfo.language;
  971. that.OpOfficialActivitiesDto.translatorInfo.price = dataList.translatorInfo.price;
  972. that.OpOfficialActivitiesDto.translatorInfo.currency = dataList.translatorInfo.currency;
  973. // that.fileList
  974. that.fileList=[]
  975. for(let i=0;i<dataList.screenshotOfMailUrls.length;i++){
  976. that.fileList.push({'name':dataList.screenshotOfMailUrls[i].split('/')[7],'url':dataList.screenshotOfMailUrls[i]})
  977. }
  978. }
  979. })
  980. },
  981. addBtn() {
  982. if (this.DiId == null && this.DiId == undefined && this.DiId == "") {
  983. this.$message.error("请选择团组名称");
  984. return;
  985. }
  986. if(this.fileList.length<=0){
  987. this.$message.error("请先选取邮件截图");
  988. return;
  989. }
  990. const that = this;
  991. this.OpOfficialActivitiesDto.date=this.TimeProcessingri(this.OpOfficialActivitiesDto.date)
  992. that.OpOfficialActivitiesDto.createUserId = that.userId
  993. that.OpOfficialActivitiesDto.diId = that.DiId
  994. if(that.OpOfficialActivitiesDto.officialForm==384||that.OpOfficialActivitiesDto.officialForm==1337){
  995. that.OpOfficialActivitiesDto.type='';
  996. that.OpOfficialActivitiesDto.address='';
  997. that.OpOfficialActivitiesDto.contact='';
  998. that.OpOfficialActivitiesDto.job='';
  999. that.OpOfficialActivitiesDto.tel='';
  1000. that.OpOfficialActivitiesDto.setting='';
  1001. that.OpOfficialActivitiesDto.dresscode='';
  1002. that.OpOfficialActivitiesDto.attendees='';
  1003. that.OpOfficialActivitiesDto.isNeedTrans=0;
  1004. that.OpOfficialActivitiesDto.translatorIdItem=[];
  1005. that.OpOfficialActivitiesDto.language='';
  1006. that.OpOfficialActivitiesDto.nature='';
  1007. that.OpOfficialActivitiesDto.emailOrWeChat='';
  1008. that.OpOfficialActivitiesDto.website='';
  1009. that.OpOfficialActivitiesDto.trip='';
  1010. that.OpOfficialActivitiesDto.isPay='';
  1011. that.OpOfficialActivitiesDto.isSubmitApproval='';
  1012. that.OpOfficialActivitiesDto.field='';
  1013. that.OpOfficialActivitiesDto.reqSample='';
  1014. that.OpOfficialActivitiesDto.dataSource='';
  1015. that.OpOfficialActivitiesDto.translatorInfo={};
  1016. }
  1017. if (that.OpOfficialActivitiesDto.isNeedTrans==0) {
  1018. that.OpOfficialActivitiesDto.translatorInfo={};
  1019. }
  1020. let filteredObjects = that.restaurants.filter(obj =>
  1021. that.OpOfficialActivitiesDto.translatorInfo.name==obj.value
  1022. );
  1023. if (filteredObjects.length<1) {
  1024. that.OpOfficialActivitiesDto.translatorInfo.id = 0;
  1025. }
  1026. if (that.OpOfficialActivitiesDto.translatorInfo.id = '') {
  1027. that.OpOfficialActivitiesDto.translatorInfo.id = 0
  1028. }
  1029. that.$refs.OpOfficialActivitiesDto.validate((valid) => {
  1030. if (valid) {
  1031. var url = "/api/Resource/OpOfficialActivities"
  1032. that.$axios({
  1033. method: 'post',
  1034. url: url,
  1035. headers: {
  1036. Authorization: 'Bearer ' + that.token
  1037. },
  1038. data: that.OpOfficialActivitiesDto
  1039. }).then(function (res) {
  1040. if (res.data.code == 200) {
  1041. that.$message({
  1042. message: res.data.msg,
  1043. type: 'success'
  1044. });
  1045. that.submitUpload(res.data.data.id);
  1046. that.returnbtn();
  1047. } else {
  1048. that.$message.error(res.data.msg);
  1049. }
  1050. })
  1051. } else {
  1052. this.$message.error('请完善信息在保存!');
  1053. return false;
  1054. }
  1055. })
  1056. },
  1057. // 文件超出限制
  1058. exceed1(files, fileList) {
  1059. this.$message.warning(
  1060. `当前限制选择 1个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
  1061. } 个文件,请取消要替换的文件`
  1062. );
  1063. },
  1064. //文件上传成功时的钩子
  1065. upLoadSuccess1(response, file, fileList) {
  1066. this.$message({
  1067. message: response.msg,
  1068. type: 'success'
  1069. });
  1070. },
  1071. //文件上传失败时的钩子
  1072. upLoadError1(response, file, fileList) {
  1073. console.log("项目添加失败");
  1074. },
  1075. //取消文件时的钩子
  1076. beforeRemove1(file, fileList) {
  1077. const that = this;
  1078. var url = "/api/Resource/DelloadOfficialActivities"
  1079. this.$axios({
  1080. method: 'post',
  1081. url: url,
  1082. headers: {
  1083. Authorization: 'Bearer ' + that.token
  1084. },
  1085. data: {
  1086. Id: file.id,
  1087. DeleteUserId: that.userId
  1088. }
  1089. }).then(function (res) {
  1090. if (res.data.code == 200) {
  1091. that.$message({
  1092. message: res.data.msg,
  1093. type: 'success'
  1094. });
  1095. } else {
  1096. that.$message.error(res.data.msg);
  1097. }
  1098. })
  1099. },
  1100. //文件状态改变时的钩子
  1101. onChange1(file, fileList) {
  1102. },
  1103. //点击文件的钩子
  1104. onPreview1(file) {
  1105. window.location.href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + file.name
  1106. },
  1107. // 文件超出限制
  1108. exceed2(files, fileList) {
  1109. this.$message.warning(
  1110. `当前限制选择 1个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
  1111. } 个文件,请取消要替换的文件`
  1112. );
  1113. },
  1114. //文件上传成功时的钩子
  1115. upLoadSuccess2(response, file, fileList) {
  1116. this.$message({
  1117. message: response.msg,
  1118. type: 'success'
  1119. });
  1120. },
  1121. //文件上传失败时的钩子
  1122. upLoadError2(response, file, fileList) {
  1123. console.log("项目添加失败");
  1124. },
  1125. //删除文件时出发的事件
  1126. beforeRemove2(file, fileList) {
  1127. const that = this;
  1128. var url = "/api/Resource/DelloadOfficialActivities"
  1129. this.$axios({
  1130. method: 'post',
  1131. url: url,
  1132. headers: {
  1133. Authorization: 'Bearer ' + that.token
  1134. },
  1135. data: {
  1136. Id: file.id,
  1137. DeleteUserId: that.userId
  1138. }
  1139. }).then(function (res) {
  1140. if (res.data.code == 200) {
  1141. that.$message({
  1142. message: res.data.msg,
  1143. type: 'success'
  1144. });
  1145. } else {
  1146. that.$message.error(res.data.msg);
  1147. }
  1148. })
  1149. },
  1150. //文件状态改变时的钩子
  1151. onChange2(file, fileList) {
  1152. },
  1153. //点击文件的钩子
  1154. onPreview2(file) {
  1155. window.location.href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + file.name
  1156. },
  1157. // 文件超出限制
  1158. exceed3(files, fileList) {
  1159. this.$message.warning(
  1160. `当前限制选择 1个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
  1161. } 个文件,请取消要替换的文件`
  1162. );
  1163. },
  1164. //文件上传成功时的钩子
  1165. upLoadSuccess3(response, file, fileList) {
  1166. this.$message({
  1167. message: response.msg,
  1168. type: 'success'
  1169. });
  1170. },
  1171. //文件上传失败时的钩子
  1172. upLoadError3(response, file, fileList) {
  1173. console.log("项目添加失败");
  1174. },
  1175. //删除文件时出发的事件
  1176. beforeRemove3(file, fileList) {
  1177. const that = this;
  1178. var url = "/api/Resource/DelloadOfficialActivities"
  1179. this.$axios({
  1180. method: 'post',
  1181. url: url,
  1182. headers: {
  1183. Authorization: 'Bearer ' + that.token
  1184. },
  1185. data: {
  1186. Id: file.id,
  1187. DeleteUserId: that.userId
  1188. }
  1189. }).then(function (res) {
  1190. if (res.data.code == 200) {
  1191. that.$message({
  1192. message: res.data.msg,
  1193. type: 'success'
  1194. });
  1195. setTimeout(() => {
  1196. that.$router.push('/home/OfficialActivities')
  1197. }, 3000);
  1198. } else {
  1199. that.$message.error(res.data.msg);
  1200. }
  1201. })
  1202. },
  1203. //文件状态改变时的钩子
  1204. onChange3(file, fileList) {
  1205. },
  1206. //点击文件的钩子
  1207. onPreview3(file) {
  1208. let href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + file.name
  1209. var a = document.createElement("a");
  1210. a.href = href;
  1211. a.download = file.name;
  1212. a.style.display = "none";
  1213. document.body.appendChild(a);
  1214. a.click();
  1215. a.remove();
  1216. //window.location.href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + file.name
  1217. },
  1218. //返回
  1219. returnbtn(){
  1220. this.$router.push({
  1221. path: "/home/OfficialActivities",
  1222. query: {
  1223. DiId: this.DiId,
  1224. }
  1225. })
  1226. },
  1227. // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用,function(file, fileList)
  1228. handleChange(file, fileList) {
  1229. console.log(file);
  1230. console.log(fileList);
  1231. this.fileList = fileList
  1232. },
  1233. //删除文件
  1234. beforeRemove(file,fileList){
  1235. if(file && file.status=="success"){
  1236. return this.$confirm('此文件已上传至服务器此操作将永久删除该文件, 是否继续?', '提示', {
  1237. confirmButtonText: '确定',
  1238. cancelButtonText: '取消',
  1239. type: 'warning'
  1240. }).then(() => {
  1241. // this.$message({
  1242. // type: 'success',
  1243. // message: '删除成功!'
  1244. // });
  1245. }).catch(() => {
  1246. this.$message({
  1247. type: 'info',
  1248. message: '已取消删除'
  1249. });
  1250. reject(false)
  1251. });
  1252. }
  1253. },
  1254. // 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。function(file, fileList)
  1255. handleRemove(file, fileList) {
  1256. this.fileList = fileList
  1257. if (file && file.status=="success") {
  1258. var that = this;
  1259. var url = "/api/Resource/OfficialActivitiesDelFile"
  1260. this.$axios({
  1261. method: 'post',
  1262. url: url,
  1263. headers: {
  1264. Authorization: 'Bearer ' + that.token
  1265. },
  1266. data:{
  1267. id:that.id,
  1268. fileName:file.name
  1269. }
  1270. }).then(function (res) {
  1271. if (res.data.code == 200) {
  1272. that.$message.success(res.data.msg);
  1273. } else {
  1274. that.$message.error(res.data.msg);
  1275. }
  1276. })
  1277. }
  1278. },
  1279. //点击文件列表中已上传的文件
  1280. handlePreview(file){
  1281. console.log(file);
  1282. window.open(file.url);
  1283. },
  1284. //上传服务器
  1285. submitUpload(val) {
  1286. // console.log(this.id);
  1287. var verdict=false
  1288. if(this.id==undefined){
  1289. this.id==val
  1290. }
  1291. this.Emailscreenshotdata.id=val;
  1292. this.Emailscreenshotdata.diId=this.DiId;
  1293. this.Emailscreenshotdata.currUserId=this.userId;
  1294. //判断是否有文件再上传
  1295. if (this.fileList.length === 0) {
  1296. return this.$message.warning('请选取文件后再上传');
  1297. }
  1298. // 下面的代码将创建一个空的FormData对象:
  1299. const formData = new FormData()
  1300. // 你可以使用FormData.append来添加键/值对到表单里面;
  1301. this.fileList.forEach((file) => {
  1302. if(file.raw!=undefined){
  1303. verdict=true;
  1304. formData.append('files', file.raw);
  1305. }
  1306. })
  1307. formData.append('id', this.Emailscreenshotdata.id);
  1308. formData.append('diId', this.Emailscreenshotdata.diId);
  1309. formData.append('currUserId', this.Emailscreenshotdata.currUserId);
  1310. if(!verdict){
  1311. return
  1312. }
  1313. var that = this;
  1314. var url = "/api/Resource/OfficialActivitiesUploadFiles"
  1315. this.$axios({
  1316. method: 'post',
  1317. url: url,
  1318. headers: {
  1319. Authorization: 'Bearer ' + that.token
  1320. },
  1321. data:formData
  1322. }).then(function (res) {
  1323. if (res.data.code == 200) {
  1324. that.$message.success(res.data.msg);
  1325. that.fileList = []
  1326. for(let i=0;i<res.data.data.fileUrls.length;i++){
  1327. that.fileList.push({'name':res.data.data.fileUrls[i].split('/')[7],'url':res.data.data.fileUrls[i]})
  1328. }
  1329. } else {
  1330. that.$message.error(res.data.msg);
  1331. }
  1332. })
  1333. },
  1334. //确认邀请
  1335. OfficialActivitiesInviteOperation(val){
  1336. var that = this;
  1337. var url = "/api/Resource/OfficialActivitiesInviteOperation"
  1338. this.$axios({
  1339. method: 'post',
  1340. url: url,
  1341. headers: {
  1342. Authorization: 'Bearer ' + that.token
  1343. },
  1344. data:{
  1345. id:that.id,
  1346. type:val
  1347. }
  1348. }).then(function (res) {
  1349. if (res.data.code == 200) {
  1350. that.QueryOfficialActivitiesById()
  1351. that.$message.success(res.data.msg);
  1352. } else {
  1353. that.$message.error(res.data.msg);
  1354. }
  1355. })
  1356. },
  1357. //控制表单
  1358. Officchange(val){
  1359. console.log(this.OpOfficialActivitiesDto.officialForm!=384,this.OpOfficialActivitiesDto.officialForm!=1337);
  1360. }
  1361. },
  1362. mounted() {
  1363. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  1364. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  1365. this.gwcfPermissions=JSON.parse(localStorage.getItem('Permissions'));
  1366. this.DiId = parseInt(this.$route.query.DiId)
  1367. this.PostTourClientListByDiId();
  1368. console.log(this.gwcfPermissions);
  1369. for(let k=0;k<this.gwcfPermissions.length;k++){
  1370. if(this.gwcfPermissions[k].funid==12){
  1371. this.btnPermissions=true;
  1372. }
  1373. }
  1374. this.QuerySetData();
  1375. this.id = this.$route.query.id
  1376. this.headers1.DiId = this.DiId
  1377. this.headers1.CreateUserId = this.userId
  1378. this.headers2.DiId = this.DiId
  1379. this.headers2.CreateUserId = this.userId
  1380. this.headers3.DiId = this.DiId
  1381. this.headers3.CreateUserId = this.userId
  1382. this.GetGroupAllList();
  1383. if (this.DiId == null && this.DiId == undefined && this.DiId == 0) {
  1384. this.DiId = '';
  1385. }
  1386. if (this.id != null && this.id != undefined && this.id != 0) {
  1387. this.QueryOfficialActivitiesById();
  1388. this.title = "修改公务出访客户资料";
  1389. this.OpOfficialActivitiesDto.status = 2
  1390. this.isShow = true
  1391. } else {
  1392. this.OpOfficialActivitiesDto.status = 1
  1393. this.title = "新增公务出访客户资料"
  1394. this.isShow = false
  1395. }
  1396. }
  1397. }
  1398. </script>
  1399. <style>
  1400. .car_add .communal-title {
  1401. display: flex;
  1402. font-size: 17px;
  1403. font-weight: 600;
  1404. color: #555;
  1405. margin-bottom: 20px;
  1406. justify-content: space-between;
  1407. align-items: center;
  1408. }
  1409. .appraise-box {
  1410. display: flex;
  1411. flex-wrap: wrap;
  1412. justify-content: space-between;
  1413. margin: 50px 0;
  1414. }
  1415. .appraise-box>div {
  1416. width: 30%;
  1417. }
  1418. .communal-box {
  1419. display: flex;
  1420. }
  1421. .communal-box>button {
  1422. margin-left: 10px;
  1423. padding: 8px 20px;
  1424. }
  1425. .car_add {
  1426. background-color: #fff;
  1427. padding: 20px;
  1428. box-shadow: 0 0 5px #0005;
  1429. border-radius: 10px;
  1430. min-height: 810px;
  1431. }
  1432. .visit-box .el-date-editor.el-input, .el-date-editor.el-input__inner{
  1433. width: 100%;
  1434. }
  1435. .visit-box .el-select{
  1436. width: 100%;
  1437. }
  1438. .reqSampleArr-ul{
  1439. position:absolute;
  1440. z-index:1;
  1441. background-color: #FFFFFF;
  1442. box-shadow: #5555 0 0 10px;
  1443. border-radius:5px ;
  1444. max-height: 400px;
  1445. overflow: auto;
  1446. }
  1447. .reqSampleArr-li:hover{
  1448. background-color: #5551;
  1449. }
  1450. .reqSampleArr-li{
  1451. line-height: 20px;
  1452. padding: 10px;
  1453. cursor: pointer;
  1454. }
  1455. .ps-title{
  1456. color: red;
  1457. font-size: 12px;
  1458. }
  1459. ::v-deep input[aria-hidden="true"] {
  1460. display: none !important;
  1461. }
  1462. ::v-deep .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner {
  1463. box-shadow: none !important;
  1464. }
  1465. @media screen and (max-width: 1700px) {
  1466. .appraise-box>div {
  1467. width: 48%;
  1468. }
  1469. .appraise-box>div el-form-item__content {
  1470. width: 260px !important;
  1471. }
  1472. }
  1473. </style>