index.vue 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227
  1. <template>
  2. <fullscreen :fullscreen.sync="fullscreen" class="container">
  3. <div class="container-box">
  4. <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
  5. <div style="overflow: hidden">
  6. <el-button
  7. style="float: right; margin-top: 10px"
  8. type="primary"
  9. @click="dialogCheck(3)"
  10. >添加</el-button
  11. >
  12. <el-button
  13. v-if="standingAuth"
  14. style="float: right; margin-top: 10px; margin-right: 20px"
  15. type="primary"
  16. @click="getStanding"
  17. >台账
  18. </el-button
  19. >
  20. </div>
  21. <div class="tabbox">
  22. <el-table
  23. height="calc(100% - 40px)"
  24. class="com-table"
  25. ref="multipleTable"
  26. :data="tableData"
  27. tooltip-effect="dark"
  28. size="small"
  29. border
  30. style="width: 100%"
  31. v-loading="loading"
  32. >
  33. <el-table-column prop="demandName" label="需求名称">
  34. </el-table-column>
  35. <el-table-column prop="createName" label="申请姓名">
  36. </el-table-column>
  37. <el-table-column prop="createTimeStr" label="申请时间">
  38. </el-table-column>
  39. <el-table-column prop="stsDesc" label="状态">
  40. <template slot-scope="scope">
  41. {{
  42. scope.row.taskName == "信息补填" && scope.row.stsDesc == "待办"
  43. ? "未办结"
  44. : scope.row.stsDesc
  45. }}
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="操作" width="150px" align="center">
  49. <template slot-scope="scope">
  50. <el-button
  51. size="mini"
  52. type="primary"
  53. @click="dialogCheck(1, scope.row)"
  54. >查看</el-button
  55. >
  56. <el-button
  57. size="mini"
  58. type="warning"
  59. v-if="scope.row.sts !== '4'"
  60. @click="dialogCheck(2, scope.row)"
  61. >处理</el-button
  62. >
  63. <el-button
  64. size="mini"
  65. type="danger"
  66. v-if="scope.row.step === '0'"
  67. @click="dialogCheck(4, scope.row)"
  68. >注销</el-button
  69. >
  70. <!-- <el-button size="mini" type="danger" @click="delLine(scope.row)">删除</el-button> -->
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. <el-pagination
  75. class="pageBox"
  76. @current-change="currchange"
  77. layout="prev, pager, next"
  78. background
  79. :total="total"
  80. >
  81. </el-pagination>
  82. </div>
  83. </div>
  84. <el-dialog
  85. :title="titname"
  86. :visible.sync="dialogStatus"
  87. width="50%"
  88. :destroy-on-close="true"
  89. :modal-append-to-body="false"
  90. :close-on-click-modal="false"
  91. :before-close="closedia"
  92. :fullscreen="true"
  93. :key="number"
  94. >
  95. <div v-loading="loadinged" class="simple-dialog">
  96. <el-form :model="infolist" ref="infolist" :rules="rules">
  97. <div class="info-line">
  98. <el-form-item prop="demandName">
  99. <span>需求名称</span>
  100. <el-input
  101. v-model="infolist.demandName"
  102. placeholder=""
  103. :disabled="disableStatus"
  104. >
  105. </el-input>
  106. </el-form-item>
  107. <el-form-item>
  108. <span>需求编号</span>
  109. <el-input v-model="infolist.demandNo" placeholder="" disabled>
  110. </el-input>
  111. </el-form-item>
  112. <!-- <el-form-item prop="terminal">
  113. <span>申请流程</span>
  114. <el-select clearable v-model="terminal" placeholder="申请流程" :disabled="disableStatus">
  115. <el-option v-for="items in options" :key="items.procId" :label="items.procName"
  116. :value="items.procId">
  117. </el-option>
  118. </el-select>
  119. </el-form-item> -->
  120. <el-form-item>
  121. <span>紧急程度</span>
  122. <el-select
  123. clearable
  124. v-model="infolist.urgDegree"
  125. placeholder=""
  126. :disabled="disableStatus"
  127. >
  128. <el-option
  129. v-for="items in urgDegreeopt"
  130. :key="items.id"
  131. :label="items.name"
  132. :value="items.name"
  133. >
  134. </el-option>
  135. </el-select>
  136. </el-form-item>
  137. <el-form-item>
  138. <span>业务主题</span>
  139. <el-input
  140. v-model="infolist.busiSubject"
  141. placeholder=""
  142. :disabled="disableStatus"
  143. >
  144. </el-input>
  145. </el-form-item>
  146. <el-form-item>
  147. <span>需求类别</span>
  148. <el-select
  149. clearable
  150. v-model="infolist.demandTypeCode"
  151. placeholder=""
  152. :disabled="disableStatus"
  153. >
  154. <el-option
  155. v-for="items in demandTypeopt"
  156. :key="items.dataCode"
  157. :label="items.dataName"
  158. :value="items.dataCode"
  159. >
  160. </el-option>
  161. </el-select>
  162. </el-form-item>
  163. <el-form-item>
  164. <span>承载渠道</span>
  165. <!-- //multiple -->
  166. <el-select
  167. clearable
  168. multiple
  169. v-model="infolist.carryChannelCode"
  170. placeholder=""
  171. :disabled="disableStatus"
  172. >
  173. <el-option
  174. v-for="items in carryChannelopt"
  175. :key="items.dataCode"
  176. :label="items.dataName"
  177. :value="items.dataCode"
  178. >
  179. </el-option>
  180. </el-select>
  181. </el-form-item>
  182. <el-form-item>
  183. <span>加载周期</span>
  184. <el-date-picker
  185. :disabled="disableStatus"
  186. v-model="busiTime"
  187. type="daterange"
  188. placeholder=""
  189. style="display: inline-flex; width: calc(100% - 120px)"
  190. >
  191. </el-date-picker>
  192. </el-form-item>
  193. </div>
  194. <el-form-item class="info-line online">
  195. <span>需求背景</span>
  196. <el-input
  197. v-model="infolist.demandBackground"
  198. placeholder=""
  199. type="textarea"
  200. :autosize="{ minRows: 3, maxRows: 10 }"
  201. :disabled="disableStatus"
  202. >
  203. </el-input>
  204. </el-form-item>
  205. <el-form-item class="info-line online">
  206. <span>需求描述</span>
  207. <el-input
  208. v-model="infolist.demandDesc"
  209. placeholder=""
  210. type="textarea"
  211. :autosize="{ minRows: 3, maxRows: 10 }"
  212. :disabled="disableStatus"
  213. >
  214. </el-input>
  215. </el-form-item>
  216. <!-- 附件展示 -->
  217. <div
  218. style="padding: 0 20px 0 120px; margin-bottom: 20px"
  219. v-if="disableStatus"
  220. >
  221. <uploadDown
  222. :datalist="datalist"
  223. :dialogStatus="uploadstatus"
  224. ></uploadDown>
  225. </div>
  226. <!-- 附件上传 -->
  227. <div v-if="!disableStatus" class="info-line online">
  228. <span style="width: 80px">附件</span>
  229. <el-upload
  230. class="info-upload"
  231. :limit="3"
  232. action=""
  233. :on-preview="handlePreview"
  234. :on-remove="handleRemove"
  235. :http-request="handleSuccess"
  236. :file-list="file"
  237. drag
  238. multiple
  239. >
  240. <div class="upload">
  241. <i class="el-icon-upload"></i>
  242. <p class="el-upload__text">
  243. 将文件拖到此处,或<em>点击上传</em>
  244. </p>
  245. </div>
  246. </el-upload>
  247. </div>
  248. <!-- 信息补填的情况 -->
  249. <el-upload
  250. v-if="vision == '信息补填'"
  251. style="float: right; margin-bottom: 20px"
  252. action=""
  253. :http-request="handleMessage"
  254. :show-file-list="false"
  255. ><el-button
  256. size="small"
  257. type="primary"
  258. :disabled="tableSatus === '4'"
  259. >导入</el-button
  260. ></el-upload
  261. >
  262. <div
  263. style="margin: 20px 0; padding: 0 20px"
  264. v-if="vision == '信息补填'"
  265. >
  266. <el-table
  267. class="com-table"
  268. ref="multipleTable"
  269. :data="infodatas"
  270. tooltip-effect="dark"
  271. size="small"
  272. border
  273. style="width: 100%"
  274. >
  275. <el-table-column prop="factoryName" label="需求承接支撑方">
  276. <template slot-scope="scope">
  277. <el-form :ref="'supportFactoryName'+scope.$index" :model="scope.row" :rules="supportRules">
  278. <el-form-item prop="factoryName">
  279. <el-select v-model="scope.row.factoryName" filterable placeholder="请选择厂商" :disabled="tableSatus === '4'" style="width: 100%">
  280. <el-option
  281. v-for="item in supportList"
  282. :key="item.id"
  283. :label="item.factoryName"
  284. :value="item.factoryName"
  285. :disabled="getDisabledFlag(item)"
  286. >
  287. </el-option>
  288. </el-select>
  289. </el-form-item>
  290. </el-form>
  291. </template>
  292. </el-table-column>
  293. <el-table-column prop="workLoad" label="涉及发生工作量">
  294. <template slot-scope="scope">
  295. <el-form :ref="'supportWorkLoad'+scope.$index" :model="scope.row" :rules="supportRules">
  296. <el-form-item prop="workLoad">
  297. <el-input
  298. v-model="scope.row.workLoad"
  299. :disabled="tableSatus === '4'"
  300. ></el-input>
  301. </el-form-item>
  302. </el-form>
  303. </template>
  304. </el-table-column>
  305. <el-table-column
  306. label="操作"
  307. width="120px"
  308. align="center"
  309. v-if="titname == '审批'"
  310. >
  311. <template slot-scope="scope">
  312. <el-button
  313. size="mini"
  314. type="primary"
  315. :disabled="tableSatus === '4'"
  316. @click="choline(1, scope)"
  317. >添加</el-button
  318. >
  319. <el-button
  320. size="mini"
  321. type="danger"
  322. :disabled="tableSatus === '4'"
  323. @click="choline(2, scope)"
  324. >删除</el-button
  325. >
  326. </template>
  327. </el-table-column>
  328. </el-table>
  329. </div>
  330. <el-form-item class="info-line online" v-if="visionsts == '2'" :rules="rules.remark">
  331. <span>审批说明</span>
  332. <el-input
  333. v-model="remark"
  334. placeholder=""
  335. type="textarea"
  336. :rows="3"
  337. :disabled="titname == '查看'"
  338. >
  339. </el-input>
  340. </el-form-item>
  341. <el-form-item class="info-line online" prop="opinion" v-if="visionsts === '2'">
  342. <span>审批意见</span>
  343. <el-select v-model="infolist.opinion" placeholder="请选择审批意见" :disabled="titname === '查看'">
  344. <el-option label="同意" value="1"></el-option>
  345. <el-option label="不同意" value="2"></el-option>
  346. </el-select>
  347. </el-form-item>
  348. <div
  349. style="margin: 20px 0px; padding: 0 20px"
  350. v-if="titname !== '添加'"
  351. >
  352. <el-table
  353. class="com-table"
  354. :data="rovaList"
  355. tooltip-effect="dark"
  356. size="small"
  357. border
  358. style="width: 100%"
  359. >
  360. <el-table-column prop="logNo" label="编号"> </el-table-column>
  361. <el-table-column prop="stepName" label="环节"> </el-table-column>
  362. <el-table-column prop="processName" label="处理人">
  363. </el-table-column>
  364. <el-table-column prop="processWorkNo" label="处理人工号">
  365. </el-table-column>
  366. <el-table-column prop="updateTimeStr" label="处理时间">
  367. </el-table-column>
  368. <el-table-column prop="remark" label="备注"> </el-table-column>
  369. <el-table-column prop="opinion" label="审批意见">
  370. <template slot-scope="scope">
  371. {{ scope.row.opinion === "1" ? '同意' : (scope.row.opinion === "2" ? '不同意' : '') }}
  372. </template>
  373. </el-table-column>
  374. </el-table>
  375. </div>
  376. </el-form>
  377. <div slot="footer" class="info-footer">
  378. <div v-if="titname === '添加' || step === '0'">
  379. <el-button type="primary" @click="handleApprove('送部门人员审核')"
  380. >送部门人员审核</el-button
  381. >
  382. <el-button type="primary" @click="handleApprove('送科室领导审核')"
  383. >送科室领导审核</el-button
  384. >
  385. <el-button @click="handleApprove('取消')">取消</el-button>
  386. </div>
  387. <div v-else>
  388. <el-button
  389. v-for="(item, index) in buttonList"
  390. :key="index"
  391. type="primary"
  392. @click="handleApprove(item)"
  393. >{{ item }}</el-button
  394. >
  395. <el-button @click="handleApprove('取消')">取消</el-button>
  396. </div>
  397. </div>
  398. </div>
  399. </el-dialog>
  400. <el-dialog
  401. title="选择审批领导"
  402. :visible.sync="checkLaeder"
  403. width="500px"
  404. :destroy-on-close="true"
  405. :modal-append-to-body="false"
  406. :close-on-click-modal="false"
  407. >
  408. <div>
  409. <el-form>
  410. <el-form-item
  411. label="审批领导"
  412. :rules="{
  413. required: true,
  414. message: '请选择审批领导',
  415. trigger: 'change',
  416. }"
  417. >
  418. <el-select v-model="leader">
  419. <el-option
  420. v-for="(item, index) in leaderList"
  421. :key="index"
  422. :label="item.label"
  423. :value="item.value"
  424. >
  425. </el-option>
  426. </el-select> </el-form-item
  427. ></el-form>
  428. </div>
  429. <div slot="footer">
  430. <el-button type="primary" size="small" @click="formSubmit(2)"
  431. >确 定</el-button
  432. >
  433. <el-button @click="checkLaeder = false" size="small">取 消</el-button>
  434. </div>
  435. </el-dialog>
  436. <el-dialog
  437. title="选择审批人"
  438. :visible.sync="checkexa"
  439. width="50%"
  440. :destroy-on-close="true"
  441. :modal-append-to-body="false"
  442. :close-on-click-modal="false"
  443. >
  444. <div>
  445. <el-form :model="infolist" ref="infolist" :rules="rules">
  446. <el-form-item prop="visiblec" class="info-line online">
  447. <span>审批人员</span>
  448. <deptTreeOnly
  449. class="tree"
  450. @treeCheck="treeCheckonly"
  451. :defaultList="defaultList"
  452. :type="depttype"
  453. :closeList="closeList"
  454. :reset-list="treeList"
  455. :only="only"
  456. ></deptTreeOnly>
  457. <div class="tree treeUser">
  458. <p v-for="(item, index) in treeList" :key="index">
  459. {{ item.label }}
  460. <i
  461. v-if="item.label"
  462. @click="deletes(item)"
  463. class="el-icon-error"
  464. ></i>
  465. </p>
  466. </div>
  467. </el-form-item>
  468. </el-form>
  469. <div slot="footer" style="text-align: right; padding-bottom: 20px">
  470. <el-button type="primary" @click="formSubmit(1)">确 定</el-button>
  471. <el-button @click="checkexa = false">取 消</el-button>
  472. </div>
  473. </div>
  474. </el-dialog>
  475. <myMessage
  476. :messTit="messTit"
  477. @closeMessage="closeMessage"
  478. :centerDialogVisible="centerDialogVisible"
  479. v-if="centerDialogVisible"
  480. ></myMessage>
  481. </fullscreen>
  482. </template>
  483. <script>
  484. import myMessage from "../../../components/myMessage.vue";
  485. import toolList from "../../../components/toolList";
  486. import myUpload from "../../../components/upload";
  487. import uploadDown from "../../../components/uploadDown.vue";
  488. import deptTreeOnly from "../performance/components/deptTreeOnly.vue";
  489. const Excel = require("exceljs");
  490. export default {
  491. components: {
  492. // mySearch,
  493. myMessage,
  494. toolList,
  495. myUpload,
  496. uploadDown,
  497. deptTreeOnly,
  498. },
  499. data() {
  500. const validatorWorkLoad = (rule, value, callback) => {
  501. if (/^[0-9]+(\.[0-9]{1,1})?$/.test(value)){
  502. callback()
  503. } else {
  504. callback(new Error('只能输入一位小数数字'))
  505. }
  506. }
  507. return {
  508. standingAuth: false,
  509. rules: {
  510. demandName: [
  511. {
  512. required: true,
  513. trigger: "blur",
  514. message: "不能为空",
  515. },
  516. ],
  517. opinion: [
  518. {
  519. required: true,
  520. trigger: "blur",
  521. message: "不能为空",
  522. },
  523. ],
  524. remark: [
  525. {
  526. required: true,
  527. trigger: "blur",
  528. message: "不能为空",
  529. },
  530. ],
  531. },
  532. supportRules: {
  533. factoryName: [
  534. {
  535. required: true,
  536. trigger: "change",
  537. message: "不能为空",
  538. },
  539. ],
  540. workLoad: [
  541. {
  542. required: true,
  543. trigger: "blur",
  544. message: "不能为空",
  545. },
  546. {
  547. trigger: "change",
  548. validator:validatorWorkLoad
  549. }
  550. ],
  551. },
  552. // 操作名称
  553. operateName: "",
  554. woNo: "",
  555. fileDeletId: [],
  556. // 当前进行到的步骤计数
  557. step: "",
  558. tooltit: "线上渠道业务需求",
  559. fullscreen: false,
  560. total: 0,
  561. // pageSize: 1,
  562. tableData: [],
  563. disableStatus: true,
  564. // 查看 审批 添加 弹出层 状态
  565. page: 1,
  566. pageSize: 10,
  567. file: [], // 附件数组
  568. titname: "",
  569. dialogStatus: false,
  570. // 查看是否办结
  571. tableSatus: null,
  572. number: 0,
  573. // 按钮标识
  574. type: "",
  575. // 联系人
  576. checkLaeder: false,
  577. checkexa: false,
  578. // 审核人组件只可选一人
  579. leader: "",
  580. leaderList: [
  581. {
  582. label: "王其侠(二级经理正职)",
  583. value: "wangqixia",
  584. },
  585. {
  586. label: "张志伟(二级经理副职)",
  587. value: "zhangzhiwei",
  588. },
  589. {
  590. label: "金鑫(二级经理副职)",
  591. value: "jinxin",
  592. },
  593. {
  594. label: "于洋(二级经理副职)",
  595. value: "yuyang01",
  596. },
  597. ],
  598. // 用来控制多选里的单选
  599. only: true,
  600. // 信息回显
  601. infolist: {},
  602. // 用户信息
  603. userInfo: {},
  604. buttonList: [],
  605. params: {},
  606. centerDialogVisible: false,
  607. messTit: "",
  608. delid: "",
  609. loading: false,
  610. loadinged: false,
  611. fileInfo: {
  612. limit: 5,
  613. url: "/bpm/api/upload",
  614. fileList: [],
  615. },
  616. rovaList: [],
  617. vision: "",
  618. datalist: {
  619. url: "/bpm/api/download",
  620. type: 1,
  621. },
  622. uploadstatus: false,
  623. mydisable: 1,
  624. opname: "",
  625. opno: "",
  626. attList: [],
  627. options: [],
  628. terminal: "729289304205336576",
  629. // terminal: '722743473704595456',//722743473704595456省722748981018685440
  630. remark: "",
  631. visionsts: "1",
  632. visionchonly: false,
  633. ifopt: [
  634. {
  635. id: 1,
  636. name: "是",
  637. },
  638. {
  639. id: 0,
  640. name: "否",
  641. },
  642. ],
  643. infodatas: [{factoryName:'',workLoad:''}],
  644. busiTime: [],
  645. urgDegreeopt: [
  646. {
  647. id: 1,
  648. name: "正常",
  649. },
  650. {
  651. id: 2,
  652. name: "紧急",
  653. },
  654. {
  655. id: 3,
  656. name: "非常紧急",
  657. },
  658. ],
  659. demandTypeopt: [],
  660. carryChannelopt: [],
  661. treeList: [],
  662. treeListonly: {},
  663. defaultList: [],
  664. closeList: false,
  665. depttype: 0,
  666. fileInfoin: {
  667. type: "btn",
  668. typename: "导入",
  669. btntype: "primary",
  670. limit: 1,
  671. url: "/market/cChannelDemand/demandCarryImport",
  672. fileList: [],
  673. },
  674. tempSave: false,
  675. supportList:[]
  676. };
  677. },
  678. watch: {
  679. "datalist.attList"() {
  680. this.number++;
  681. },
  682. // tempSave(value) {
  683. // if (value) {
  684. // // 监听编辑状态,每20秒请求一次,注意函数不加()
  685. // this.timer = window.setInterval(this.temp, 20000);
  686. // } else {
  687. // // 停止监听
  688. // clearInterval(this.timer);
  689. // }
  690. // },
  691. },
  692. methods: {
  693. // 判断需求支撑方是否可选
  694. getDisabledFlag(support){
  695. for(let n=0;n<this.infodatas.length;n++){
  696. if (this.infodatas[n] === support.factoryName){
  697. return true;
  698. }
  699. }
  700. return false;
  701. },
  702. // 新的处理方法
  703. handlePreview(file) {
  704. console.log(file, "Preview");
  705. },
  706. handleRemove(file) {
  707. if (file.id) {
  708. this.fileDeletId.push(file.id);
  709. }
  710. this.file = this.file.filter((el) => el.uid !== file.uid);
  711. },
  712. handleSuccess({ file }) {
  713. this.file.push(file);
  714. },
  715. handleMessage({ file }) {
  716. const workbook = new Excel.Workbook();
  717. // workbook.xlsx.readFile(file.path) // use path
  718. const Array = [];
  719. workbook.xlsx.load(file).then(async () => {
  720. const worksheet = await workbook.getWorksheet(1);
  721. worksheet.eachRow(({ values }) => {
  722. let obj = {
  723. factoryName: values[1],
  724. workLoad: values[2],
  725. };
  726. Array.push(obj);
  727. });
  728. if (
  729. this.infodatas.length === 1 &&
  730. !this.infodatas[0].factoryName &&
  731. !this.infodatas[0].workLoad
  732. ) {
  733. this.infodatas = Array;
  734. } else {
  735. this.infodatas.push(...Array);
  736. }
  737. });
  738. },
  739. handleApprove(type) {
  740. if (type === "取消") {
  741. // this.dialogStatus = false;
  742. // this.disableStatus = false;
  743. // this.only = false;
  744. // this.number++;
  745. // this.infolist = {};
  746. this.closedia();
  747. return;
  748. }
  749. this.$refs.infolist.validate((val) => {
  750. if (val) {
  751. switch (type) {
  752. case "送部门人员审核":
  753. this.operateName = "送部门人员审核";
  754. this.checkexa = true;
  755. this.type = "1";
  756. console.log("送部门人员审核");
  757. break;
  758. // case "送领导审核":
  759. // this.operateName = "送领导审核";
  760. // this.type = "1";
  761. // this.checkLaeder = true;
  762. // console.log("送领导审核");
  763. // break;
  764. //领导审批支持整个OA组织架构
  765. case "送科室领导审核":
  766. this.operateName = "送科室领导审核";
  767. this.type = "2";
  768. // this.checkLaeder = true;
  769. this.checkexa = true;
  770. console.log("送领导审核");
  771. break;
  772. case "送部门领导审核":
  773. case "送公司领导审核":
  774. this.operateName = type;
  775. this.type = "3";
  776. // this.checkLaeder = true;
  777. this.checkexa = true;
  778. console.log(type);
  779. break;
  780. case "送起草人编号发送":
  781. this.operateName = "送起草人编号";
  782. this.handleSendNo();
  783. break;
  784. case "确认编号":
  785. this.operateName = "确认编号";
  786. this.handleComfirmNo();
  787. break;
  788. case "提交电商接口人审批":
  789. case "提交省公司电商接口人审批":
  790. this.operateName = type;
  791. this.deliverReadOffice();
  792. break;
  793. case "打回":
  794. this.operateName = "打回";
  795. this.handleBackRecord();
  796. break;
  797. case "转交渠道经理待办":
  798. this.checkexa = true;
  799. this.type = "0";
  800. this.operateName = "转交渠道经理待办";
  801. break;
  802. case "送项目经理会签":
  803. this.checkexa = true;
  804. this.type = "0";
  805. this.only = false;
  806. this.operateName = "送项目经理会签";
  807. break;
  808. case "送电商接口人":
  809. this.operateName = type;
  810. this.handleDeliverReadOfficeOrOtherDo("1");
  811. break;
  812. case "送其他人办理":
  813. this.checkexa = true;
  814. this.operateName = "送其他人办理";
  815. break;
  816. case "确认上线":
  817. this.operateName = "确认上线";
  818. this.handleConfirmOnline("1");
  819. break;
  820. /* case "已办结":
  821. this.operateName = "已办结";
  822. this.handleConfirmOnline("2");
  823. break;*/
  824. case "保存":
  825. this.operateName = "保存";
  826. console.log(this.infodatas)
  827. this.handleConfirmOnline("3");
  828. break;
  829. }
  830. }
  831. });
  832. },
  833. // 确认上线/已办结
  834. async handleConfirmOnline(type) {
  835. // 校验需求支撑方和工作量 是否合规
  836. for (let i = 0; i < this.infodatas.length; i++) {
  837. let supportFlag = await this.$refs['supportFactoryName' + i].validate();
  838. if (supportFlag){
  839. let workLoadFlag = await this.$refs['supportWorkLoad' + i].validate();
  840. if (!workLoadFlag){
  841. return ;
  842. }
  843. }else {
  844. return ;
  845. }
  846. }
  847. let flag = 1;
  848. const factoryName = [];
  849. const workLoad = [];
  850. this.infodatas.forEach((el) => {
  851. // 判断条件
  852. if (el.factoryName && el.workLoad) {
  853. flag = flag * 1;
  854. factoryName.push(el.factoryName);
  855. workLoad.push(el.workLoad);
  856. } else {
  857. flag = flag * 0;
  858. }
  859. });
  860. if (flag) {
  861. let reqdata = {
  862. operateName: this.operateName,
  863. reviewOpinion:this.remark,
  864. type,
  865. support: factoryName,
  866. workload: workLoad,
  867. woNo: this.woNo + "",
  868. opinion: this.infolist.opinion,
  869. };
  870. this.$http({
  871. url: "/market/mkOnlineChannel/confirmOnline",
  872. method: "post",
  873. headers: {
  874. "Content-Type": "application/json",
  875. },
  876. data: reqdata,
  877. }).then(({ data }) => {
  878. console.log(data)
  879. if (data && data.result === 0) {
  880. this.$message.success(data.desc);
  881. this.dialogStatus = false;
  882. this.handleInit();
  883. this.closedia();
  884. } else {
  885. this.$message.error("操作失败");
  886. }
  887. });
  888. } else {
  889. this.$message.error("请输入必要的信息");
  890. }
  891. },
  892. // 送电商接口人阅办或送其他人办理
  893. handleDeliverReadOfficeOrOtherDo(type) {
  894. console.log(this.operateName, type);
  895. let receiveId = [];
  896. let receiveName = [];
  897. // console.log(this.treeList);
  898. this.treeList.forEach((item) => {
  899. receiveId.push(item.loginNoStr);
  900. receiveName.push(item.label);
  901. });
  902. let reqdata = {
  903. operateName: this.operateName,
  904. type,
  905. reviewOpinion: this.remark,
  906. woId: this.woNo + "",
  907. opinion: this.infolist.opinion,
  908. };
  909. if (type === "2") {
  910. reqdata = {
  911. ...reqdata,
  912. receiveId: receiveId.join(","),
  913. receiveName: receiveName.join(","),
  914. };
  915. }
  916. console.log(reqdata);
  917. this.$http({
  918. url: "/market/mkOnlineChannel/deliverReadOfficeOrOtherDo",
  919. method: "post",
  920. headers: {
  921. "Content-Type": "application/json",
  922. },
  923. data: reqdata,
  924. }).then(({ data }) => {
  925. console.log(data)
  926. if (data && data.result === 0) {
  927. this.$message.success(data.desc);
  928. this.checkexa = false;
  929. this.dialogStatus = false;
  930. this.handleInit();
  931. this.closedia();
  932. } else {
  933. this.$message.error("操作失败");
  934. }
  935. });
  936. },
  937. // 电商接口人阅办---送项目经理会签
  938. handleCountersigned() {
  939. let receiveId = [];
  940. let receiveName = [];
  941. console.log(this.treeList);
  942. this.treeList.forEach((item) => {
  943. receiveId.push(item.loginNoStr);
  944. receiveName.push(item.label);
  945. });
  946. let reqdata = {
  947. operateName: this.operateName,
  948. receiveId: receiveId.join(","),
  949. receiveName: receiveName.join(","),
  950. reviewOpinion: this.remark,
  951. woNo: this.woNo + "",
  952. opinion: this.infolist.opinion,
  953. };
  954. console.log(reqdata);
  955. this.$http({
  956. url: "/market/mkOnlineChannel/countersigned",
  957. method: "post",
  958. headers: {
  959. "Content-Type": "application/json",
  960. },
  961. data: reqdata,
  962. }).then(({ data }) => {
  963. console.log(data)
  964. if (data && data.result === 0) {
  965. this.$message.success(data.desc);
  966. this.checkexa = false;
  967. this.dialogStatus = false;
  968. this.handleInit();
  969. this.closedia();
  970. } else {
  971. this.$message.error("操作失败");
  972. }
  973. });
  974. },
  975. // 转交渠道经理待办
  976. handleNeedyComfirm() {
  977. let receiveId = [];
  978. let receiveName = [];
  979. // console.log(this.treeList);
  980. this.treeList.forEach((item) => {
  981. receiveId.push(item.loginNoStr);
  982. receiveName.push(item.label);
  983. });
  984. let reqdata = {
  985. operateName: this.operateName,
  986. receiveId: receiveId.join(","),
  987. receiveName: receiveName.join(","),
  988. reviewOpinion: this.remark,
  989. woNo: this.woNo + "",
  990. opinion: this.infolist.opinion,
  991. };
  992. console.log(reqdata);
  993. this.$http({
  994. url: "/market/mkOnlineChannel/confirmDemand",
  995. method: "post",
  996. headers: {
  997. "Content-Type": "application/json",
  998. },
  999. data: reqdata,
  1000. }).then(({ data }) => {
  1001. console.log(data)
  1002. if (data && data.result === 0) {
  1003. this.$message.success(data.desc);
  1004. this.checkexa = false;
  1005. this.dialogStatus = false;
  1006. this.handleInit();
  1007. this.closedia();
  1008. } else {
  1009. this.$message.error("操作失败");
  1010. }
  1011. });
  1012. },
  1013. // 打回方法
  1014. handleBackRecord() {
  1015. this.$http({
  1016. url: "/market/mkOnlineChannel/backRecord",
  1017. method: "get",
  1018. headers: {
  1019. "Content-Type": "application/json",
  1020. },
  1021. params: {
  1022. woNo: this.woNo,
  1023. remark: [this.operateName, this.remark]
  1024. .filter((el) => el !== "")
  1025. .join(","),
  1026. opinion: this.infolist.opinion,
  1027. },
  1028. }).then(({ data }) => {
  1029. console.log(data)
  1030. if (data && data.result === 0) {
  1031. this.$message.success(data.desc);
  1032. this.dialogStatus = false;
  1033. this.handleInit();
  1034. this.closedia();
  1035. } else {
  1036. this.$message.error("操作失败");
  1037. }
  1038. });
  1039. },
  1040. // 表单提交
  1041. formSubmit(type) {
  1042. if (type === 1) {
  1043. if (!this.treeList.length) {
  1044. this.$message.error("请选择审核人员");
  1045. return;
  1046. }
  1047. } else {
  1048. if (!this.leader) {
  1049. this.$message.error("请选择审核领导");
  1050. return;
  1051. }
  1052. }
  1053. let request = 0;
  1054. let formData = new FormData();
  1055. let origin_params = {};
  1056. if (this.infolist.woNo) {
  1057. origin_params = {
  1058. // 需求编号
  1059. woNo: this.infolist.woNo,
  1060. createId: this.infolist.createId,
  1061. createName: this.infolist.createName,
  1062. id: this.infolist.id,
  1063. delFileId: this.fileDeletId.join(","),
  1064. };
  1065. }
  1066. let params = {
  1067. ...origin_params,
  1068. // 需求名称
  1069. demandName: this.infolist.demandName,
  1070. // 紧急程度
  1071. urgDegree: this.infolist.urgDegree,
  1072. // 业务主题
  1073. busiSubject: this.infolist.busiSubject,
  1074. // 需求类别
  1075. demandTypeCode: this.infolist.demandTypeCode,
  1076. //承载渠道
  1077. carryChannelCode: this.infolist.carryChannelCode.join(","),
  1078. // 加载周期 起止
  1079. busiStartTime: this.busiTime[0]
  1080. ? this.$formatDate(this.busiTime[0], "YYYY-MM-DD")
  1081. : "",
  1082. busiEndTime: this.busiTime[1]
  1083. ? this.$formatDate(this.busiTime[1], "YYYY-MM-DD")
  1084. : "",
  1085. // 需求背景
  1086. demandBackground: this.infolist.demandBackground,
  1087. // 需求描述
  1088. demandDesc: this.infolist.demandDesc,
  1089. // 审批说明
  1090. remark: [this.operateName, this.remark]
  1091. .filter((el) => el !== "")
  1092. .join(","),
  1093. // 审核人员
  1094. loginNameList: this.treeList.length
  1095. ? this.treeList.map((el) => {
  1096. return el.label;
  1097. })
  1098. : [this.leader],
  1099. loginNoList: this.treeList.length
  1100. ? this.treeList.map((el) => {
  1101. return el.loginNoStr;
  1102. })
  1103. : [this.leader],
  1104. type: this.type,
  1105. opinion: this.infolist.opinion ? this.infolist.opinion : '',
  1106. // fileList: this.file,
  1107. // 添加操作步骤
  1108. operateName: this.operateName
  1109. };
  1110. // 处理其他参数
  1111. for (let key in params) {
  1112. formData.append(key, params[key]);
  1113. }
  1114. // 这是处理文件的参数
  1115. if (this.file.length) {
  1116. this.file.forEach((el, index) => {
  1117. if (el.constructor.name === "File") {
  1118. formData.append(`file${index + 1}`, el);
  1119. }
  1120. });
  1121. }
  1122. if (this.operateName === "转交渠道经理待办") {
  1123. this.handleNeedyComfirm();
  1124. return;
  1125. }
  1126. if (this.operateName === "送项目经理会签") {
  1127. this.handleCountersigned();
  1128. return;
  1129. }
  1130. if (this.operateName === "送其他人办理") {
  1131. this.handleDeliverReadOfficeOrOtherDo("2");
  1132. return;
  1133. }
  1134. request = 1;
  1135. if (request) {
  1136. this.$http({
  1137. url: "/market/mkOnlineChannel/saveOrUpdate",
  1138. method: "post",
  1139. headers: {
  1140. "Content-Type": "multipart/form-data",
  1141. },
  1142. data: formData,
  1143. }).then(({ data }) => {
  1144. if (data && data.result === 0) {
  1145. this.$message({
  1146. type: "success",
  1147. message: data.desc,
  1148. });
  1149. this.closedia();
  1150. this.handleInit();
  1151. }
  1152. });
  1153. }
  1154. },
  1155. // 送起草人编号发送
  1156. handleSendNo() {
  1157. this.$http({
  1158. url: "/market/mkOnlineChannel/createDemandNo",
  1159. method: "get",
  1160. headers: {
  1161. "Content-Type": "application/json",
  1162. },
  1163. params: {
  1164. woNo: this.woNo,
  1165. remark: [this.operateName, this.remark]
  1166. .filter((el) => el !== "")
  1167. .join(","),
  1168. opinion: this.infolist.opinion
  1169. },
  1170. }).then(({ data }) => {
  1171. console.log(data)
  1172. if (data && data.result === 0) {
  1173. this.$message.success(data.desc);
  1174. this.handleInit();
  1175. this.closedia();
  1176. } else {
  1177. this.$message.error("操作失败");
  1178. }
  1179. });
  1180. },
  1181. // 确认编号
  1182. handleComfirmNo() {
  1183. this.$http({
  1184. url: "/market/mkOnlineChannel/confirmNumber",
  1185. method: "post",
  1186. headers: {
  1187. "Content-Type": "application/json",
  1188. },
  1189. data: {
  1190. woNo: this.woNo + "",
  1191. remark: [this.operateName, this.remark]
  1192. .filter((el) => el !== "")
  1193. .join(","),
  1194. opinion: this.infolist.opinion,
  1195. },
  1196. }).then(({ data }) => {
  1197. console.log(data)
  1198. if (data && data.result === 0) {
  1199. this.$message.success(data.desc);
  1200. this.handleInit();
  1201. this.closedia();
  1202. } else {
  1203. this.$message.error("操作失败");
  1204. }
  1205. });
  1206. },
  1207. // 确认编号后送电商接口人
  1208. deliverReadOffice() {
  1209. this.$http({
  1210. url: "/market/mkOnlineChannel/deliverReadOffice",
  1211. method: "post",
  1212. headers: {
  1213. "Content-Type": "application/json",
  1214. },
  1215. data: {
  1216. woNo: this.woNo + "",
  1217. remark: [this.operateName, this.remark]
  1218. .filter((el) => el !== "")
  1219. .join(","),
  1220. opinion: this.infolist.opinion,
  1221. },
  1222. }).then(({ data }) => {
  1223. console.log(data)
  1224. if (data && data.result === 0) {
  1225. this.$message.success(data.desc);
  1226. this.handleInit();
  1227. this.closedia();
  1228. } else {
  1229. this.$message.error("操作失败");
  1230. }
  1231. });
  1232. },
  1233. // 初始化列表接口
  1234. handleInit() {
  1235. this.$http({
  1236. url: "/market/mkOnlineChannel/queryPage",
  1237. method: "post",
  1238. headers: {
  1239. "Content-Type": "application/json",
  1240. },
  1241. data: {
  1242. page: this.page,
  1243. pageSize: this.pageSize,
  1244. },
  1245. }).then(
  1246. ({
  1247. data: {
  1248. body: { data, count },
  1249. },
  1250. }) => {
  1251. this.total = count;
  1252. this.tableData = data;
  1253. console.log("===================================")
  1254. console.log(this.tableData)
  1255. }
  1256. );
  1257. },
  1258. // 注销
  1259. delDetails(id){
  1260. this.$confirm('确认注销吗?', '提示', {
  1261. confirmButtonText: '确定',
  1262. cancelButtonText: '取消',
  1263. type: 'warning'
  1264. }).then(() => {
  1265. this.$http({
  1266. url: "/market/mkOnlineChannel/delDetailsByWoNo",
  1267. method: "post",
  1268. headers: {
  1269. "Content-Type": "application/json",
  1270. },
  1271. data: id,
  1272. }).then(({ data }) => {
  1273. console.log("res======================================")
  1274. console.log(data)
  1275. console.log(data.result)
  1276. if (data && data.result === 0) {
  1277. this.$message.success(data.desc);
  1278. this.handleInit();
  1279. } else {
  1280. this.$message.error("操作失败");
  1281. }
  1282. });
  1283. }).catch(() => {
  1284. this.$message({
  1285. type: 'info',
  1286. message: '取消注销'
  1287. });
  1288. });
  1289. },
  1290. // 查看详情接口封装
  1291. queryDetails(id) {
  1292. this.$http({
  1293. url: "/market/mkOnlineChannel/getMkOnlineChannelById",
  1294. method: "post",
  1295. headers: {
  1296. "Content-Type": "application/json",
  1297. },
  1298. data: id,
  1299. }).then(
  1300. ({
  1301. data: {
  1302. body: { button, mkOnlineChannel },
  1303. },
  1304. }) => {
  1305. for (const i in mkOnlineChannel) {
  1306. if (mkOnlineChannel[i] === "undefined") {
  1307. mkOnlineChannel[i] = "";
  1308. }
  1309. }
  1310. this.infolist = {
  1311. ...mkOnlineChannel,
  1312. carryChannelCode: mkOnlineChannel.carryChannelCode
  1313. ? mkOnlineChannel.carryChannelCode.split(",")
  1314. : [],
  1315. opinion: ''
  1316. };
  1317. this.busiTime = [
  1318. mkOnlineChannel.busiStartTime,
  1319. mkOnlineChannel.busiEndTime,
  1320. ];
  1321. this.rovaList = mkOnlineChannel.logList;
  1322. this.datalist = {
  1323. ...this.datalist,
  1324. attList: mkOnlineChannel.attList,
  1325. };
  1326. this.file = [
  1327. ...mkOnlineChannel.attList.map((el) => ({
  1328. ...el,
  1329. name: el.fileName,
  1330. })),
  1331. ];
  1332. //表单编号
  1333. this.woNo = mkOnlineChannel.woNo;
  1334. // 步骤
  1335. this.step = mkOnlineChannel.step;
  1336. // 最后一步是否办结
  1337. this.tableSatus = mkOnlineChannel.sts;
  1338. this.dialogStatus = true;
  1339. if (this.titname === "添加") {
  1340. // 审批说明
  1341. this.visionsts = "";
  1342. this.disableStatus = false;
  1343. } else {
  1344. if (this.titname === "查看") {
  1345. this.buttonList = [];
  1346. this.disableStatus = true;
  1347. this.visionsts = "";
  1348. if (this.step === "9") {
  1349. this.vision = "信息补填";
  1350. this.getSupportList()
  1351. // 查看也不能操作数据
  1352. this.tableSatus = "4";
  1353. this.visionsts = "";
  1354. this.infodatas = mkOnlineChannel.workloadAndsupport.length
  1355. ? mkOnlineChannel.workloadAndsupport.map((el) => ({
  1356. factoryName: el.support,
  1357. workLoad: el.workload,
  1358. }))
  1359. : [
  1360. {
  1361. factoryName: "",
  1362. workLoad: "",
  1363. },
  1364. ];
  1365. }
  1366. } else {
  1367. this.buttonList = button;
  1368. // 这里就是审批
  1369. if (this.step === "0") {
  1370. this.disableStatus = false;
  1371. this.visionsts = "";
  1372. return;
  1373. }
  1374. this.disableStatus = true;
  1375. this.dialogStatus = true;
  1376. if (this.step === "9") {
  1377. // 这个是判断最后一步是否可以导入数据
  1378. if (this.buttonList[0] === "确认上线") {
  1379. this.vision = "信息补填";
  1380. this.visionsts = "";
  1381. this.getSupportList()
  1382. }
  1383. this.infodatas = mkOnlineChannel.workloadAndsupport.length
  1384. ? mkOnlineChannel.workloadAndsupport.map((el) => ({
  1385. factoryName: el.support,
  1386. workLoad: el.workload,
  1387. }))
  1388. : [
  1389. {
  1390. factoryName: "",
  1391. workLoad: "",
  1392. },
  1393. ];
  1394. } else {
  1395. this.vision = "";
  1396. this.visionsts = "2";
  1397. }
  1398. }
  1399. }
  1400. }
  1401. );
  1402. },
  1403. // 获取所有需求承接支撑方
  1404. getSupportList(){
  1405. this.$http({
  1406. url: "/market/cChannelContract/queryList",
  1407. method: "post",
  1408. headers: {
  1409. "Content-Type": "application/json",
  1410. },
  1411. data: {},
  1412. }).then((res) => {
  1413. this.supportList = res.data;
  1414. });
  1415. },
  1416. // 老方法
  1417. temp() {
  1418. if (JSON.stringify(this.infolist) == "{}") {
  1419. return;
  1420. }
  1421. let params = {};
  1422. params.infolist = this.infolist;
  1423. params.fileList = [];
  1424. params.attList = [];
  1425. this.attList.forEach((item) => {
  1426. let file = {
  1427. id: item.fileCode,
  1428. fileCode: item.fileCode,
  1429. fileName: item.fileName,
  1430. name: item.fileName,
  1431. };
  1432. params.fileList.push(file);
  1433. params.attList.push(file);
  1434. });
  1435. this.$http({
  1436. url: "/market/bpmTemp/temp",
  1437. method: "post",
  1438. headers: {
  1439. "Content-Type": "application/json",
  1440. },
  1441. data: {
  1442. bpmType: "1",
  1443. content: JSON.stringify(params),
  1444. },
  1445. }).then((res) => {
  1446. //console.log(res)
  1447. });
  1448. },
  1449. deletes(v) {
  1450. // this.treeListonly = {};
  1451. this.treeList = this.treeList.filter(
  1452. (el) => el.loginNoStr !== v.loginNoStr
  1453. );
  1454. this.closeList = !this.closeList;
  1455. },
  1456. treeCheckonly(v) {
  1457. this.treeList = v;
  1458. // this.treeListonly = v;
  1459. },
  1460. choline(v, n) {
  1461. if (v == 1) {
  1462. this.infodatas.push({factoryName:'',workLoad:''});
  1463. } else {
  1464. this.infodatas.splice(n.$index, 1);
  1465. }
  1466. },
  1467. closedia() {
  1468. // dialog回显信息
  1469. this.infolist = {};
  1470. // 图片
  1471. this.attList = [];
  1472. this.file = [];
  1473. // 审核人
  1474. this.treeList = [];
  1475. // 时间
  1476. this.busiTime = [];
  1477. // 领导人
  1478. this.checkLaeder = false;
  1479. // 审核领导
  1480. this.leader = "";
  1481. this.remark = "";
  1482. // 审批状态的图片
  1483. delete this.datalist.attList;
  1484. this.fileInfo.fileList = [];
  1485. // 弹出层
  1486. this.dialogStatus = false;
  1487. // 审核人
  1488. this.checkexa = false;
  1489. // 审核人单选是否开启
  1490. this.only = true;
  1491. },
  1492. //获取列表
  1493. getList(v, n) {
  1494. this.pageSize = n;
  1495. let _this = this;
  1496. this.loading = true;
  1497. v.procName = "业务需求申请(地市公司),业务需求申请(省公司)";
  1498. this.$http({
  1499. url: "/bpm/api/queryToDoAndFinishTaskList",
  1500. method: "post",
  1501. headers: {
  1502. "Content-Type": "application/json",
  1503. page: '{"pageNo":"' + n + '","pageSize":"10"}',
  1504. },
  1505. data: v,
  1506. }).then((res) => {
  1507. this.tableData = res.data.data;
  1508. this.total = res.data.totalRecord;
  1509. this.loading = false;
  1510. });
  1511. },
  1512. // 分页
  1513. currchange(v) {
  1514. this.page = v;
  1515. this.handleInit();
  1516. },
  1517. //申请 // 打开弹出层
  1518. dialogCheck(type, data) {
  1519. // let infolist = Object.assign({}, n);
  1520. this.vision = "";
  1521. this.visionsts = "";
  1522. if (type === 1) {
  1523. this.titname = "查看";
  1524. this.visionsts = "2";
  1525. this.queryDetails(data.woNo);
  1526. } else if (type === 2) {
  1527. this.titname = "审批";
  1528. this.visionsts = "2";
  1529. this.queryDetails(data.woNo);
  1530. } else if (type === 3) {
  1531. this.titname = "添加";
  1532. this.dialogStatus = true;
  1533. this.visionchonly = false;
  1534. this.disableStatus = false;
  1535. // this.$http({
  1536. // url: "/market/bpmTemp/query",
  1537. // method: "post",
  1538. // headers: { "Content-Type": "application/json" },
  1539. // data: { bpmType: "1" },
  1540. // }).then((res) => {
  1541. // if (res.data) {
  1542. // let content = JSON.parse(res.data.content);
  1543. // this.infolist = content.infolist;
  1544. // this.attList = content.attList;
  1545. // this.fileInfo.fileList = content.fileList;
  1546. // }
  1547. // // this.tempSave = true;
  1548. // });
  1549. // return;
  1550. } else if (type === 4) {
  1551. this.titname = "注销";
  1552. this.visionsts = "2";
  1553. this.delDetails(data.woNo);
  1554. }
  1555. // this.$http({
  1556. // url: "/bpm/api/taskInit",
  1557. // method: "post",
  1558. // headers: {
  1559. // "Content-Type": "application/json",
  1560. // },
  1561. // data: {
  1562. // woNo: n.woNo,
  1563. // },
  1564. // }).then((res) => {
  1565. // // this.infolist = Object.assign({}, res.data);
  1566. // this.terminal = infolist.procId;
  1567. // this.opname = res.data.opName;
  1568. // this.opno = res.data.opNo;
  1569. // this.infolist = JSON.parse(res.data.params.terminalRes);
  1570. // res.data.params.fillList
  1571. // ? (this.infodatas = JSON.parse(res.data.params.fillList))
  1572. // : "";
  1573. // this.infolist.procId = infolist.procId;
  1574. // this.infolist.procVersion = infolist.procVersion;
  1575. // this.remark = infolist.remark;
  1576. // this.infolist.stepId = infolist.stepId;
  1577. // this.infolist.taskId = infolist.taskId;
  1578. // this.infolist.taskName = infolist.taskName;
  1579. // this.infolist.opName = infolist.opName;
  1580. // this.infolist.opNo = infolist.opNo;
  1581. // this.infolist.opTime = infolist.opTime;
  1582. // this.infolist.woNo = infolist.woNo;
  1583. // this.busiTime = [];
  1584. // this.busiTime[0] = this.infolist.busiStartTime;
  1585. // this.busiTime[1] = this.infolist.busiEndTime;
  1586. // this.visionchonly = false;
  1587. // if (
  1588. // res.data.taskList[res.data.taskList.length - 1].taskName == "流程发起"
  1589. // ) {
  1590. // this.vision = "流程发起";
  1591. // if (this.titname == "审批") {
  1592. // this.disableStatus = false;
  1593. // }
  1594. // this.visionchonly = true;
  1595. // } else if (
  1596. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1597. // "科室主任初审"
  1598. // ) {
  1599. // this.vision = "科室主任初审";
  1600. // this.visionsts = "2";
  1601. // this.visionchonly = true;
  1602. // } else if (
  1603. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1604. // "部门副主任复审"
  1605. // ) {
  1606. // this.vision = "部门副主任复审";
  1607. // this.visionsts = "2";
  1608. // this.visionchonly = true;
  1609. // } else if (
  1610. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1611. // "主管副总终审" ||
  1612. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1613. // "部门副主任终审"
  1614. // ) {
  1615. // this.vision = "主管副总终审";
  1616. // this.visionsts = "2";
  1617. // this.visionchonly = true;
  1618. // } else if (
  1619. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1620. // "需求预评估"
  1621. // ) {
  1622. // this.vision = "需求预评估";
  1623. // this.visionsts = "2";
  1624. // this.visionchonly = true;
  1625. // } else if (
  1626. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1627. // "需求预评估初审"
  1628. // ) {
  1629. // this.vision = "需求预评估初审";
  1630. // this.visionsts = "2";
  1631. // this.visionchonly = true;
  1632. // } else if (
  1633. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1634. // "需求预评估复审"
  1635. // ) {
  1636. // this.vision = "需求预评估复审";
  1637. // this.visionsts = "2";
  1638. // this.visionchonly = true;
  1639. // } else if (
  1640. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1641. // "渠道经理会签"
  1642. // ) {
  1643. // this.vision = "渠道经理会签";
  1644. // this.visionsts = "2";
  1645. // this.visionchonly = true;
  1646. // } else if (
  1647. // res.data.taskList[res.data.taskList.length - 1].taskName == "需求确认"
  1648. // ) {
  1649. // this.vision = "需求确认";
  1650. // this.visionsts = "3";
  1651. // this.visionchonly = true;
  1652. // } else if (
  1653. // res.data.taskList[res.data.taskList.length - 1].taskName == "上线管理"
  1654. // ) {
  1655. // this.vision = "上线管理";
  1656. // this.visionsts = "3";
  1657. // this.visionchonly = true;
  1658. // } else if (
  1659. // res.data.taskList[res.data.taskList.length - 1].taskName == "上线验证"
  1660. // ) {
  1661. // this.vision = "上线验证";
  1662. // this.visionsts = "3";
  1663. // this.visionchonly = true;
  1664. // } else if (
  1665. // res.data.taskList[res.data.taskList.length - 1].taskName == "信息补填"
  1666. // ) {
  1667. // this.vision = "信息补填";
  1668. // this.visionsts = "4";
  1669. // }
  1670. // this.datalist.attList = JSON.parse(res.data.params.attList);
  1671. // this.attList = [];
  1672. // this.fileInfo.fileList = [];
  1673. // this.datalist.attList.forEach((item) => {
  1674. // item.id = item.attchFileId;
  1675. // this.fileInfo.fileList.push({
  1676. // name: item.fileName,
  1677. // url: "",
  1678. // id: item.id,
  1679. // attchFileId: item.attchFileId,
  1680. // fileName: item.fileName,
  1681. // });
  1682. // this.attList.push({
  1683. // name: item.fileName,
  1684. // url: "",
  1685. // id: item.id,
  1686. // attchFileId: item.attchFileId,
  1687. // fileName: item.fileName,
  1688. // });
  1689. // });
  1690. // this.rovaList = res.data.taskList;
  1691. // this.uploadstatus = true;
  1692. // });
  1693. },
  1694. //审批
  1695. dialogCli(v) {
  1696. this.dialogStatus = false;
  1697. if (v === 3) {
  1698. this.infolist = {};
  1699. this.attList = [];
  1700. this.fileInfo.fileList = [];
  1701. this.checkexa = false;
  1702. this.tempSave = false;
  1703. return;
  1704. }
  1705. let _this = this;
  1706. this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
  1707. if (v === 1) {
  1708. let params = {
  1709. dealType: "1",
  1710. dealTypeDesc: "打回",
  1711. procId: this.infolist.procId,
  1712. procVersion: this.infolist.procVersion,
  1713. remark: this.remark,
  1714. stepId: this.infolist.stepId,
  1715. taskId: this.infolist.taskId,
  1716. taskName: this.infolist.taskName,
  1717. opName: this.infolist.opName,
  1718. opNo: this.opno,
  1719. opTime: this.infolist.opTime,
  1720. params: {
  1721. procExeCondiVal: "不同意",
  1722. terminalRes: JSON.stringify(this.infolist),
  1723. assigneeNo: this.opno,
  1724. assigneeName: this.opname,
  1725. },
  1726. woNo: this.infolist.woNo,
  1727. };
  1728. this.submitInfo("/bpm/api/submitTask", params);
  1729. } else if (v === 2) {
  1730. let param = {
  1731. dealType: "0",
  1732. dealTypeDesc: "提交",
  1733. procId: this.infolist.procId,
  1734. procVersion: this.infolist.procVersion,
  1735. remark: this.remark,
  1736. stepId: this.infolist.stepId,
  1737. taskId: this.infolist.taskId,
  1738. taskName: this.infolist.taskName,
  1739. opName: this.infolist.opName,
  1740. opNo: this.opno,
  1741. opTime: this.infolist.opTime,
  1742. params: {
  1743. woType: this.infolist.woType,
  1744. terminalRes: JSON.stringify(this.infolist),
  1745. },
  1746. woNo: this.infolist.woNo,
  1747. };
  1748. if (this.visionchonly) {
  1749. param.params.assigneeNo = this.treeListonly.leaderAuditNo;
  1750. param.params.assigneeName = this.treeListonly.leaderAuditName;
  1751. }
  1752. // if(this.vision == '科室主任初审'||this.vision == '部门副主任复审'){
  1753. // this.$http({
  1754. // url: "/sysmgr/csysuserinfo/queryUserListByLoginNoAndDuty",
  1755. // method: "post",
  1756. // headers: {
  1757. // "Content-Type": "application/json",
  1758. // "page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
  1759. // },
  1760. // data: {"duty":"7,12"},
  1761. // }).then((res) => {
  1762. // if(res.data.length == 0){
  1763. // this.$message({
  1764. // message: '暂无领导审批,发起失败!',
  1765. // type: 'error'
  1766. // });
  1767. // return
  1768. // }else{
  1769. // param.params.assigneeNo=res.data[0].loginNoStr;
  1770. // param.params.assigneeName=res.data[0].loginNameStr;
  1771. // _this.submitInfo("/bpm/api/submitTask", param);
  1772. // return
  1773. // }
  1774. // });
  1775. // }else if(this.vision == '渠道经理会签'||this.vision == '上线管理'){
  1776. // param.params.assigneeNo= this.opno;
  1777. // param.params.assigneeName= this.opname;
  1778. // this.submitInfo("/bpm/api/submitTask", param);
  1779. // }
  1780. if (this.vision == "信息补填") {
  1781. param.params.fillList = JSON.stringify(this.infodatas);
  1782. this.submitInfo("/bpm/api/submitTask", param);
  1783. } else {
  1784. if (this.vision == "流程发起") {
  1785. let attList = [];
  1786. for (let i = 0; i < this.attList.length; i++) {
  1787. attList.push({
  1788. id: this.attList[i].id,
  1789. fileCode: this.attList[i].fileCode,
  1790. fileName: this.attList[i].fileName,
  1791. opName: this.attList[i].opName,
  1792. opNo: this.attList[i].opNo,
  1793. opTime: this.attList[i].opTime,
  1794. woNo: this.infolist.woNo,
  1795. attchFileId: this.attList[i].attchFileId,
  1796. });
  1797. }
  1798. param.params.attList = JSON.stringify(attList);
  1799. this.$http({
  1800. url: "/market/bpmTemp/del",
  1801. method: "post",
  1802. headers: {
  1803. "Content-Type": "application/json",
  1804. },
  1805. data: {
  1806. bpmType: "1",
  1807. },
  1808. }).then((res) => {
  1809. //console.log(res)
  1810. });
  1811. }
  1812. this.submitInfo("/bpm/api/submitTask", param);
  1813. }
  1814. }
  1815. this.checkexa = false;
  1816. },
  1817. //添加
  1818. dialogCliadd(v) {
  1819. let _this = this;
  1820. let info = {};
  1821. info.params = {};
  1822. info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
  1823. info.opNo = this.userInfo.loginNo;
  1824. info.opName = this.userInfo.loginName;
  1825. info.woTitle = this.infolist.demandName;
  1826. info.params.terminalRes = this.infolist;
  1827. info.params.terminalRes.busiStartTime = this.busiTime[0]
  1828. ? _this.$formatDate(this.busiTime[0], "YYYY-MM-DD")
  1829. : "";
  1830. info.params.terminalRes.busiEndTime = this.busiTime[1]
  1831. ? _this.$formatDate(this.busiTime[1], "YYYY-MM-DD")
  1832. : "";
  1833. info.procId = this.terminal;
  1834. info.params.assigneeNo = this.treeListonly.leaderAuditNo;
  1835. info.params.assigneeName = this.treeListonly.leaderAuditName;
  1836. for (let i = 0; i < this.options.length; i++) {
  1837. if (this.terminal == this.options[i].procId) {
  1838. info.procName = this.options[i].procName;
  1839. info.procVersion = this.options[i].procVersion;
  1840. }
  1841. }
  1842. let attList = [];
  1843. for (let i = 0; i < this.attList.length; i++) {
  1844. attList.push({
  1845. id: this.attList[i].id,
  1846. fileCode: this.attList[i].fileCode,
  1847. fileName: this.attList[i].fileName,
  1848. opName: this.attList[i].opName,
  1849. opNo: this.attList[i].opNo,
  1850. opTime: this.attList[i].opTime,
  1851. woNo: this.infolist.woNo,
  1852. attchFileId: this.attList[i].attchFileId,
  1853. });
  1854. }
  1855. let fillList = [{}, {}];
  1856. info.params.fillList = JSON.stringify(fillList);
  1857. info.params.attList = JSON.stringify(attList);
  1858. info.params.terminalRes = JSON.stringify(info.params.terminalRes);
  1859. this.checkexa = false;
  1860. this.visionchonly = false;
  1861. this.submitInfo("/bpm/api/startProc", info);
  1862. },
  1863. submitInfo(u, v) {
  1864. let _this = this;
  1865. this.$refs.infolist.validate((valid) => {
  1866. if (valid) {
  1867. this.$http({
  1868. url: u,
  1869. method: "post",
  1870. headers: {
  1871. "Content-Type": "application/json",
  1872. },
  1873. data: v,
  1874. }).then((res) => {
  1875. if (res.data.result === 1) {
  1876. _this.$message({
  1877. message: res.data.desc,
  1878. type: "error",
  1879. });
  1880. } else {
  1881. _this.$message({
  1882. message: "成功",
  1883. type: "success",
  1884. });
  1885. _this.closedia();
  1886. _this.infolist = {};
  1887. _this.attList = [];
  1888. _this.fileInfo.fileList = [];
  1889. _this.getList(this.params, this.pageSize);
  1890. }
  1891. });
  1892. }
  1893. });
  1894. },
  1895. getStanding() {
  1896. this.$router.push({
  1897. path: "/ywStanding",
  1898. });
  1899. this.setabList("线上业务需求台账", "/ywStanding");
  1900. },
  1901. setabList(n, p) {
  1902. let params = {
  1903. children: "",
  1904. name: n,
  1905. rountPath: p,
  1906. target: "_self",
  1907. };
  1908. for (let i = 0; i < this.$store.state.tabList.length; i++) {
  1909. if (this.$store.state.tabList[i].name === params.name) {
  1910. this.$store.state.tabList[i] = params;
  1911. }
  1912. }
  1913. let set = new Set([...this.$store.state.tabList, params]);
  1914. set.add(params);
  1915. this.$store.commit("setDefaultActive", params.rountPath);
  1916. this.$store.commit("setTabList", Array.from(set));
  1917. },
  1918. //流程
  1919. getTermianl() {
  1920. this.$http({
  1921. url: "/bpm/api/queryBpmProcList",
  1922. method: "post",
  1923. headers: {
  1924. "Content-Type": "application/json",
  1925. page: '{"pageNo":"' + 1 + '","pageSize":"100"}',
  1926. },
  1927. data: {},
  1928. }).then((res) => {
  1929. this.options = res.data.data;
  1930. });
  1931. },
  1932. closeMessage(v) {
  1933. this.centerDialogVisible = false;
  1934. let _this = this;
  1935. if (v === 1) {
  1936. _this
  1937. .$http({
  1938. url: "/bpm/api/deleteBpmPrePlugin",
  1939. method: "post",
  1940. headers: {
  1941. "Content-Type": "application/json",
  1942. },
  1943. data: {
  1944. id: this.delid,
  1945. },
  1946. })
  1947. .then((res) => {
  1948. if (res.data.result === 1) {
  1949. _this.$message({
  1950. message: res.data.desc,
  1951. type: "error",
  1952. });
  1953. } else {
  1954. _this.$message({
  1955. message: "删除成功",
  1956. type: "success",
  1957. });
  1958. _this.getList(this.params, this.pageSize);
  1959. }
  1960. });
  1961. }
  1962. },
  1963. //删除
  1964. delLine(v) {
  1965. this.centerDialogVisible = true;
  1966. this.messTit = "即将删除此条数据, 是否删除?";
  1967. this.delid = v.id;
  1968. },
  1969. //文件返回值
  1970. uploadBack(v) {
  1971. this.attList = v;
  1972. },
  1973. uploadBackin(v) {
  1974. console.log(v, "v");
  1975. let x = [];
  1976. for (let i = 1; i < v.data.body.length; i++) {
  1977. x.push({
  1978. factoryName: v.data.body[i].factoryName,
  1979. workLoad: v.data.body[i].workLoad,
  1980. });
  1981. }
  1982. this.infodatas = x;
  1983. },
  1984. //功能栏
  1985. iconCli(v) {
  1986. if (v === 1) {
  1987. this.handleInit();
  1988. }
  1989. if (v === 2) {
  1990. this.fullscreen = !this.fullscreen;
  1991. }
  1992. },
  1993. getUser() {
  1994. this.userInfo = JSON.parse(window.sessionStorage.userInfo);
  1995. },
  1996. // 字典
  1997. // 需求类别 demandType
  1998. // 承载渠道 demandChnl
  1999. getsaleChnl() {
  2000. this.$http({
  2001. url: "/market/cfgDataDict/queryList",
  2002. method: "post",
  2003. headers: {
  2004. "Content-Type": "application/json",
  2005. },
  2006. data: {
  2007. dictCode: "demandType",
  2008. },
  2009. }).then((res) => {
  2010. this.demandTypeopt = res.data;
  2011. });
  2012. this.$http({
  2013. url: "/market/cfgDataDict/queryList",
  2014. method: "post",
  2015. headers: {
  2016. "Content-Type": "application/json",
  2017. },
  2018. data: {
  2019. dictCode: "demandChnl",
  2020. },
  2021. }).then((res) => {
  2022. this.carryChannelopt = res.data;
  2023. });
  2024. },
  2025. ywStandingAuth(){
  2026. this.$http({
  2027. url: "/market/mkOnlineChannel/ywStandingAuth",
  2028. method: "post",
  2029. headers: {
  2030. "Content-Type": "application/json",
  2031. },
  2032. }).then((res) => {
  2033. this.standingAuth = res.data.body;
  2034. });
  2035. }
  2036. },
  2037. mounted() {
  2038. // 调用初始化接口
  2039. this.handleInit();
  2040. // this.getList({}, 1);
  2041. this.getUser();
  2042. this.getTermianl();
  2043. this.getsaleChnl();
  2044. },
  2045. created() { this.ywStandingAuth()},
  2046. };
  2047. </script>
  2048. <style scoped lang="scss">
  2049. .onetab {
  2050. margin-bottom: 20px;
  2051. padding: 0 20px;
  2052. }
  2053. .simple-dialog {
  2054. position: relative;
  2055. min-height: 90vh;
  2056. }
  2057. .info {
  2058. &-footer {
  2059. display: flex;
  2060. margin-top: 50px;
  2061. justify-content: flex-end;
  2062. margin-bottom: 50px;
  2063. }
  2064. &-upload {
  2065. width: 500px !important;
  2066. position: relative;
  2067. }
  2068. }
  2069. .titbox {
  2070. div {
  2071. float: right;
  2072. i {
  2073. font-size: 22px;
  2074. margin-left: 20px;
  2075. cursor: pointer;
  2076. }
  2077. }
  2078. }
  2079. .upload {
  2080. position: relative;
  2081. left: calc(50% - 229px / 2);
  2082. top: -4px;
  2083. display: flex !important;
  2084. flex-direction: column;
  2085. }
  2086. .tabbox {
  2087. margin-top: 15px;
  2088. }
  2089. .pageBox {
  2090. text-align: right;
  2091. margin-top: 10px;
  2092. }
  2093. .info-line {
  2094. width: 100%;
  2095. display: block;
  2096. padding-left: 20px;
  2097. div {
  2098. width: 50%;
  2099. display: inline-block;
  2100. }
  2101. span {
  2102. width: 100px;
  2103. display: inline-block;
  2104. text-align: left;
  2105. i {
  2106. color: red;
  2107. display: inline-block;
  2108. padding-right: 5px;
  2109. }
  2110. }
  2111. .el-select,
  2112. .el-input {
  2113. width: calc(100% - 120px);
  2114. }
  2115. }
  2116. .online {
  2117. width: 100%;
  2118. .el-select {
  2119. width: calc(100% - 100px);
  2120. }
  2121. span {
  2122. vertical-align: top;
  2123. }
  2124. .el-textarea {
  2125. width: calc(100% - 120px);
  2126. }
  2127. .tree {
  2128. width: calc(50% - 60px);
  2129. display: inline-block;
  2130. margin-right: 20px;
  2131. height: 300px;
  2132. overflow-y: scroll;
  2133. .el-icon-error {
  2134. float: right;
  2135. font-size: 20px;
  2136. margin-top: 9px;
  2137. cursor: pointer;
  2138. }
  2139. }
  2140. .treeUser {
  2141. margin: 0;
  2142. border: 1px solid #ddd;
  2143. p {
  2144. background: #f4f4f4;
  2145. padding: 0 20px;
  2146. border-bottom: 1px solid #fff;
  2147. }
  2148. }
  2149. .treeUserb {
  2150. width: calc(100% - 100px);
  2151. border: 1px solid #ddd;
  2152. background: #f4f4f4;
  2153. border-radius: 3px;
  2154. height: auto;
  2155. overflow: hidden;
  2156. p {
  2157. display: inline-block;
  2158. padding: 0 20px;
  2159. // margin-bottom: 5px;
  2160. }
  2161. }
  2162. }
  2163. .adv-type {
  2164. margin-top: 20px;
  2165. display: flex;
  2166. justify-content: space-between;
  2167. flex-wrap: wrap;
  2168. // border: 1px solid #ddd;
  2169. border-radius: 5px;
  2170. padding: 20px;
  2171. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  2172. div {
  2173. width: 33%;
  2174. text-align: center;
  2175. height: 80px;
  2176. overflow: hidden;
  2177. min-width: 100px;
  2178. cursor: pointer;
  2179. padding-top: 10px;
  2180. margin: 10px 0;
  2181. }
  2182. div:hover {
  2183. background: #cfe8fc;
  2184. border-radius: 5px;
  2185. }
  2186. span {
  2187. width: 100%;
  2188. display: inline-block;
  2189. height: 40px;
  2190. // line-height: 40px;
  2191. i {
  2192. color: #0074d9;
  2193. font-size: 36px;
  2194. }
  2195. }
  2196. }
  2197. </style>