OpOfficialActivities.vue 73 KB

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