index.vue 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220
  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'">
  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. },
  525. supportRules: {
  526. factoryName: [
  527. {
  528. required: true,
  529. trigger: "change",
  530. message: "不能为空",
  531. },
  532. ],
  533. workLoad: [
  534. {
  535. required: true,
  536. trigger: "blur",
  537. message: "不能为空",
  538. },
  539. {
  540. trigger: "change",
  541. validator:validatorWorkLoad
  542. }
  543. ],
  544. },
  545. // 操作名称
  546. operateName: "",
  547. woNo: "",
  548. fileDeletId: [],
  549. // 当前进行到的步骤计数
  550. step: "",
  551. tooltit: "线上渠道业务需求",
  552. fullscreen: false,
  553. total: 0,
  554. // pageSize: 1,
  555. tableData: [],
  556. disableStatus: true,
  557. // 查看 审批 添加 弹出层 状态
  558. page: 1,
  559. pageSize: 10,
  560. file: [], // 附件数组
  561. titname: "",
  562. dialogStatus: false,
  563. // 查看是否办结
  564. tableSatus: null,
  565. number: 0,
  566. // 按钮标识
  567. type: "",
  568. // 联系人
  569. checkLaeder: false,
  570. checkexa: false,
  571. // 审核人组件只可选一人
  572. leader: "",
  573. leaderList: [
  574. {
  575. label: "王其侠(二级经理正职)",
  576. value: "wangqixia",
  577. },
  578. {
  579. label: "张志伟(二级经理副职)",
  580. value: "zhangzhiwei",
  581. },
  582. {
  583. label: "金鑫(二级经理副职)",
  584. value: "jinxin",
  585. },
  586. {
  587. label: "于洋(二级经理副职)",
  588. value: "yuyang01",
  589. },
  590. ],
  591. // 用来控制多选里的单选
  592. only: true,
  593. // 信息回显
  594. infolist: {},
  595. // 用户信息
  596. userInfo: {},
  597. buttonList: [],
  598. params: {},
  599. centerDialogVisible: false,
  600. messTit: "",
  601. delid: "",
  602. loading: false,
  603. loadinged: false,
  604. fileInfo: {
  605. limit: 5,
  606. url: "/bpm/api/upload",
  607. fileList: [],
  608. },
  609. rovaList: [],
  610. vision: "",
  611. datalist: {
  612. url: "/bpm/api/download",
  613. type: 1,
  614. },
  615. uploadstatus: false,
  616. mydisable: 1,
  617. opname: "",
  618. opno: "",
  619. attList: [],
  620. options: [],
  621. terminal: "729289304205336576",
  622. // terminal: '722743473704595456',//722743473704595456省722748981018685440
  623. remark: "",
  624. visionsts: "1",
  625. visionchonly: false,
  626. ifopt: [
  627. {
  628. id: 1,
  629. name: "是",
  630. },
  631. {
  632. id: 0,
  633. name: "否",
  634. },
  635. ],
  636. infodatas: [{factoryName:'',workLoad:''}],
  637. busiTime: [],
  638. urgDegreeopt: [
  639. {
  640. id: 1,
  641. name: "正常",
  642. },
  643. {
  644. id: 2,
  645. name: "紧急",
  646. },
  647. {
  648. id: 3,
  649. name: "非常紧急",
  650. },
  651. ],
  652. demandTypeopt: [],
  653. carryChannelopt: [],
  654. treeList: [],
  655. treeListonly: {},
  656. defaultList: [],
  657. closeList: false,
  658. depttype: 0,
  659. fileInfoin: {
  660. type: "btn",
  661. typename: "导入",
  662. btntype: "primary",
  663. limit: 1,
  664. url: "/market/cChannelDemand/demandCarryImport",
  665. fileList: [],
  666. },
  667. tempSave: false,
  668. supportList:[]
  669. };
  670. },
  671. watch: {
  672. "datalist.attList"() {
  673. this.number++;
  674. },
  675. // tempSave(value) {
  676. // if (value) {
  677. // // 监听编辑状态,每20秒请求一次,注意函数不加()
  678. // this.timer = window.setInterval(this.temp, 20000);
  679. // } else {
  680. // // 停止监听
  681. // clearInterval(this.timer);
  682. // }
  683. // },
  684. },
  685. methods: {
  686. // 判断需求支撑方是否可选
  687. getDisabledFlag(support){
  688. for(let n=0;n<this.infodatas.length;n++){
  689. if (this.infodatas[n] === support.factoryName){
  690. return true;
  691. }
  692. }
  693. return false;
  694. },
  695. // 新的处理方法
  696. handlePreview(file) {
  697. console.log(file, "Preview");
  698. },
  699. handleRemove(file) {
  700. if (file.id) {
  701. this.fileDeletId.push(file.id);
  702. }
  703. this.file = this.file.filter((el) => el.uid !== file.uid);
  704. },
  705. handleSuccess({ file }) {
  706. this.file.push(file);
  707. },
  708. handleMessage({ file }) {
  709. const workbook = new Excel.Workbook();
  710. // workbook.xlsx.readFile(file.path) // use path
  711. const Array = [];
  712. workbook.xlsx.load(file).then(async () => {
  713. const worksheet = await workbook.getWorksheet(1);
  714. worksheet.eachRow(({ values }) => {
  715. let obj = {
  716. factoryName: values[1],
  717. workLoad: values[2],
  718. };
  719. Array.push(obj);
  720. });
  721. if (
  722. this.infodatas.length === 1 &&
  723. !this.infodatas[0].factoryName &&
  724. !this.infodatas[0].workLoad
  725. ) {
  726. this.infodatas = Array;
  727. } else {
  728. this.infodatas.push(...Array);
  729. }
  730. });
  731. },
  732. handleApprove(type) {
  733. if (type === "取消") {
  734. // this.dialogStatus = false;
  735. // this.disableStatus = false;
  736. // this.only = false;
  737. // this.number++;
  738. // this.infolist = {};
  739. this.closedia();
  740. return;
  741. }
  742. this.$refs.infolist.validate((val) => {
  743. if (val) {
  744. switch (type) {
  745. case "送部门人员审核":
  746. this.operateName = "送部门人员审核";
  747. this.checkexa = true;
  748. this.type = "1";
  749. console.log("送部门人员审核");
  750. break;
  751. // case "送领导审核":
  752. // this.operateName = "送领导审核";
  753. // this.type = "1";
  754. // this.checkLaeder = true;
  755. // console.log("送领导审核");
  756. // break;
  757. //领导审批支持整个OA组织架构
  758. case "送科室领导审核":
  759. this.operateName = "送科室领导审核";
  760. this.type = "2";
  761. // this.checkLaeder = true;
  762. this.checkexa = true;
  763. console.log("送领导审核");
  764. break;
  765. case "送部门领导审核":
  766. case "送公司领导审核":
  767. this.operateName = type;
  768. this.type = "3";
  769. // this.checkLaeder = true;
  770. this.checkexa = true;
  771. console.log(type);
  772. break;
  773. case "送起草人编号发送":
  774. this.operateName = "送起草人编号";
  775. this.handleSendNo();
  776. break;
  777. case "确认编号":
  778. this.operateName = "确认编号";
  779. this.handleComfirmNo();
  780. break;
  781. case "提交电商接口人审批":
  782. case "提交省公司电商接口人审批":
  783. this.operateName = type;
  784. this.deliverReadOffice();
  785. break;
  786. case "打回":
  787. this.operateName = "打回";
  788. this.handleBackRecord();
  789. break;
  790. case "转交渠道经理待办":
  791. this.checkexa = true;
  792. this.type = "0";
  793. this.operateName = "转交渠道经理待办";
  794. break;
  795. case "送项目经理会签":
  796. this.checkexa = true;
  797. this.type = "0";
  798. this.only = false;
  799. this.operateName = "送项目经理会签";
  800. break;
  801. case "送电商接口人":
  802. this.operateName = type;
  803. this.handleDeliverReadOfficeOrOtherDo("1");
  804. break;
  805. case "送其他人办理":
  806. this.checkexa = true;
  807. this.operateName = "送其他人办理";
  808. break;
  809. case "确认上线":
  810. this.operateName = "确认上线";
  811. this.handleConfirmOnline("1");
  812. break;
  813. /* case "已办结":
  814. this.operateName = "已办结";
  815. this.handleConfirmOnline("2");
  816. break;*/
  817. case "保存":
  818. this.operateName = "保存";
  819. console.log(this.infodatas)
  820. this.handleConfirmOnline("3");
  821. break;
  822. }
  823. }
  824. });
  825. },
  826. // 确认上线/已办结
  827. async handleConfirmOnline(type) {
  828. // 校验需求支撑方和工作量 是否合规
  829. for (let i = 0; i < this.infodatas.length; i++) {
  830. let supportFlag = await this.$refs['supportFactoryName' + i].validate();
  831. if (supportFlag){
  832. let workLoadFlag = await this.$refs['supportWorkLoad' + i].validate();
  833. if (!workLoadFlag){
  834. return ;
  835. }
  836. }else {
  837. return ;
  838. }
  839. }
  840. let flag = 1;
  841. const factoryName = [];
  842. const workLoad = [];
  843. this.infodatas.forEach((el) => {
  844. // 判断条件
  845. if (el.factoryName && el.workLoad) {
  846. flag = flag * 1;
  847. factoryName.push(el.factoryName);
  848. workLoad.push(el.workLoad);
  849. } else {
  850. flag = flag * 0;
  851. }
  852. });
  853. if (flag) {
  854. let reqdata = {
  855. operateName: this.operateName,
  856. reviewOpinion:this.remark,
  857. type,
  858. support: factoryName,
  859. workload: workLoad,
  860. woNo: this.woNo + "",
  861. opinion: this.infolist.opinion,
  862. };
  863. this.$http({
  864. url: "/market/mkOnlineChannel/confirmOnline",
  865. method: "post",
  866. headers: {
  867. "Content-Type": "application/json",
  868. },
  869. data: reqdata,
  870. }).then(({ data }) => {
  871. console.log(data)
  872. if (data && data.result === 0) {
  873. this.$message.success(data.desc);
  874. this.dialogStatus = false;
  875. this.handleInit();
  876. this.closedia();
  877. } else {
  878. this.$message.error("操作失败");
  879. }
  880. });
  881. } else {
  882. this.$message.error("请输入必要的信息");
  883. }
  884. },
  885. // 送电商接口人阅办或送其他人办理
  886. handleDeliverReadOfficeOrOtherDo(type) {
  887. console.log(this.operateName, type);
  888. let receiveId = [];
  889. let receiveName = [];
  890. // console.log(this.treeList);
  891. this.treeList.forEach((item) => {
  892. receiveId.push(item.loginNoStr);
  893. receiveName.push(item.label);
  894. });
  895. let reqdata = {
  896. operateName: this.operateName,
  897. type,
  898. reviewOpinion: this.remark,
  899. woId: this.woNo + "",
  900. opinion: this.infolist.opinion,
  901. };
  902. if (type === "2") {
  903. reqdata = {
  904. ...reqdata,
  905. receiveId: receiveId.join(","),
  906. receiveName: receiveName.join(","),
  907. };
  908. }
  909. console.log(reqdata);
  910. this.$http({
  911. url: "/market/mkOnlineChannel/deliverReadOfficeOrOtherDo",
  912. method: "post",
  913. headers: {
  914. "Content-Type": "application/json",
  915. },
  916. data: reqdata,
  917. }).then(({ data }) => {
  918. console.log(data)
  919. if (data && data.result === 0) {
  920. this.$message.success(data.desc);
  921. this.checkexa = false;
  922. this.dialogStatus = false;
  923. this.handleInit();
  924. this.closedia();
  925. } else {
  926. this.$message.error("操作失败");
  927. }
  928. });
  929. },
  930. // 电商接口人阅办---送项目经理会签
  931. handleCountersigned() {
  932. let receiveId = [];
  933. let receiveName = [];
  934. console.log(this.treeList);
  935. this.treeList.forEach((item) => {
  936. receiveId.push(item.loginNoStr);
  937. receiveName.push(item.label);
  938. });
  939. let reqdata = {
  940. operateName: this.operateName,
  941. receiveId: receiveId.join(","),
  942. receiveName: receiveName.join(","),
  943. reviewOpinion: this.remark,
  944. woNo: this.woNo + "",
  945. opinion: this.infolist.opinion,
  946. };
  947. console.log(reqdata);
  948. this.$http({
  949. url: "/market/mkOnlineChannel/countersigned",
  950. method: "post",
  951. headers: {
  952. "Content-Type": "application/json",
  953. },
  954. data: reqdata,
  955. }).then(({ data }) => {
  956. console.log(data)
  957. if (data && data.result === 0) {
  958. this.$message.success(data.desc);
  959. this.checkexa = false;
  960. this.dialogStatus = false;
  961. this.handleInit();
  962. this.closedia();
  963. } else {
  964. this.$message.error("操作失败");
  965. }
  966. });
  967. },
  968. // 转交渠道经理待办
  969. handleNeedyComfirm() {
  970. let receiveId = [];
  971. let receiveName = [];
  972. // console.log(this.treeList);
  973. this.treeList.forEach((item) => {
  974. receiveId.push(item.loginNoStr);
  975. receiveName.push(item.label);
  976. });
  977. let reqdata = {
  978. operateName: this.operateName,
  979. receiveId: receiveId.join(","),
  980. receiveName: receiveName.join(","),
  981. reviewOpinion: this.remark,
  982. woNo: this.woNo + "",
  983. opinion: this.infolist.opinion,
  984. };
  985. console.log(reqdata);
  986. this.$http({
  987. url: "/market/mkOnlineChannel/confirmDemand",
  988. method: "post",
  989. headers: {
  990. "Content-Type": "application/json",
  991. },
  992. data: reqdata,
  993. }).then(({ data }) => {
  994. console.log(data)
  995. if (data && data.result === 0) {
  996. this.$message.success(data.desc);
  997. this.checkexa = false;
  998. this.dialogStatus = false;
  999. this.handleInit();
  1000. this.closedia();
  1001. } else {
  1002. this.$message.error("操作失败");
  1003. }
  1004. });
  1005. },
  1006. // 打回方法
  1007. handleBackRecord() {
  1008. this.$http({
  1009. url: "/market/mkOnlineChannel/backRecord",
  1010. method: "get",
  1011. headers: {
  1012. "Content-Type": "application/json",
  1013. },
  1014. params: {
  1015. woNo: this.woNo,
  1016. remark: [this.operateName, this.remark]
  1017. .filter((el) => el !== "")
  1018. .join(","),
  1019. opinion: this.infolist.opinion,
  1020. },
  1021. }).then(({ data }) => {
  1022. console.log(data)
  1023. if (data && data.result === 0) {
  1024. this.$message.success(data.desc);
  1025. this.dialogStatus = false;
  1026. this.handleInit();
  1027. this.closedia();
  1028. } else {
  1029. this.$message.error("操作失败");
  1030. }
  1031. });
  1032. },
  1033. // 表单提交
  1034. formSubmit(type) {
  1035. if (type === 1) {
  1036. if (!this.treeList.length) {
  1037. this.$message.error("请选择审核人员");
  1038. return;
  1039. }
  1040. } else {
  1041. if (!this.leader) {
  1042. this.$message.error("请选择审核领导");
  1043. return;
  1044. }
  1045. }
  1046. let request = 0;
  1047. let formData = new FormData();
  1048. let origin_params = {};
  1049. if (this.infolist.woNo) {
  1050. origin_params = {
  1051. // 需求编号
  1052. woNo: this.infolist.woNo,
  1053. createId: this.infolist.createId,
  1054. createName: this.infolist.createName,
  1055. id: this.infolist.id,
  1056. delFileId: this.fileDeletId.join(","),
  1057. };
  1058. }
  1059. let params = {
  1060. ...origin_params,
  1061. // 需求名称
  1062. demandName: this.infolist.demandName,
  1063. // 紧急程度
  1064. urgDegree: this.infolist.urgDegree,
  1065. // 业务主题
  1066. busiSubject: this.infolist.busiSubject,
  1067. // 需求类别
  1068. demandTypeCode: this.infolist.demandTypeCode,
  1069. //承载渠道
  1070. carryChannelCode: this.infolist.carryChannelCode.join(","),
  1071. // 加载周期 起止
  1072. busiStartTime: this.busiTime[0]
  1073. ? this.$formatDate(this.busiTime[0], "YYYY-MM-DD")
  1074. : "",
  1075. busiEndTime: this.busiTime[1]
  1076. ? this.$formatDate(this.busiTime[1], "YYYY-MM-DD")
  1077. : "",
  1078. // 需求背景
  1079. demandBackground: this.infolist.demandBackground,
  1080. // 需求描述
  1081. demandDesc: this.infolist.demandDesc,
  1082. // 审批说明
  1083. remark: [this.operateName, this.remark]
  1084. .filter((el) => el !== "")
  1085. .join(","),
  1086. // 审核人员
  1087. loginNameList: this.treeList.length
  1088. ? this.treeList.map((el) => {
  1089. return el.label;
  1090. })
  1091. : [this.leader],
  1092. loginNoList: this.treeList.length
  1093. ? this.treeList.map((el) => {
  1094. return el.loginNoStr;
  1095. })
  1096. : [this.leader],
  1097. type: this.type,
  1098. opinion: this.infolist.opinion ? this.infolist.opinion : '',
  1099. // fileList: this.file,
  1100. // 添加操作步骤
  1101. operateName: this.operateName
  1102. };
  1103. // 处理其他参数
  1104. for (let key in params) {
  1105. formData.append(key, params[key]);
  1106. }
  1107. // 这是处理文件的参数
  1108. if (this.file.length) {
  1109. this.file.forEach((el, index) => {
  1110. if (el.constructor.name === "File") {
  1111. formData.append(`file${index + 1}`, el);
  1112. }
  1113. });
  1114. }
  1115. if (this.operateName === "转交渠道经理待办") {
  1116. this.handleNeedyComfirm();
  1117. return;
  1118. }
  1119. if (this.operateName === "送项目经理会签") {
  1120. this.handleCountersigned();
  1121. return;
  1122. }
  1123. if (this.operateName === "送其他人办理") {
  1124. this.handleDeliverReadOfficeOrOtherDo("2");
  1125. return;
  1126. }
  1127. request = 1;
  1128. if (request) {
  1129. this.$http({
  1130. url: "/market/mkOnlineChannel/saveOrUpdate",
  1131. method: "post",
  1132. headers: {
  1133. "Content-Type": "multipart/form-data",
  1134. },
  1135. data: formData,
  1136. }).then(({ data }) => {
  1137. if (data && data.result === 0) {
  1138. this.$message({
  1139. type: "success",
  1140. message: data.desc,
  1141. });
  1142. this.closedia();
  1143. this.handleInit();
  1144. }
  1145. });
  1146. }
  1147. },
  1148. // 送起草人编号发送
  1149. handleSendNo() {
  1150. this.$http({
  1151. url: "/market/mkOnlineChannel/createDemandNo",
  1152. method: "get",
  1153. headers: {
  1154. "Content-Type": "application/json",
  1155. },
  1156. params: {
  1157. woNo: this.woNo,
  1158. remark: [this.operateName, this.remark]
  1159. .filter((el) => el !== "")
  1160. .join(","),
  1161. opinion: this.infolist.opinion
  1162. },
  1163. }).then(({ data }) => {
  1164. console.log(data)
  1165. if (data && data.result === 0) {
  1166. this.$message.success(data.desc);
  1167. this.handleInit();
  1168. this.closedia();
  1169. } else {
  1170. this.$message.error("操作失败");
  1171. }
  1172. });
  1173. },
  1174. // 确认编号
  1175. handleComfirmNo() {
  1176. this.$http({
  1177. url: "/market/mkOnlineChannel/confirmNumber",
  1178. method: "post",
  1179. headers: {
  1180. "Content-Type": "application/json",
  1181. },
  1182. data: {
  1183. woNo: this.woNo + "",
  1184. remark: [this.operateName, this.remark]
  1185. .filter((el) => el !== "")
  1186. .join(","),
  1187. opinion: this.infolist.opinion,
  1188. },
  1189. }).then(({ data }) => {
  1190. console.log(data)
  1191. if (data && data.result === 0) {
  1192. this.$message.success(data.desc);
  1193. this.handleInit();
  1194. this.closedia();
  1195. } else {
  1196. this.$message.error("操作失败");
  1197. }
  1198. });
  1199. },
  1200. // 确认编号后送电商接口人
  1201. deliverReadOffice() {
  1202. this.$http({
  1203. url: "/market/mkOnlineChannel/deliverReadOffice",
  1204. method: "post",
  1205. headers: {
  1206. "Content-Type": "application/json",
  1207. },
  1208. data: {
  1209. woNo: this.woNo + "",
  1210. remark: [this.operateName, this.remark]
  1211. .filter((el) => el !== "")
  1212. .join(","),
  1213. opinion: this.infolist.opinion,
  1214. },
  1215. }).then(({ data }) => {
  1216. console.log(data)
  1217. if (data && data.result === 0) {
  1218. this.$message.success(data.desc);
  1219. this.handleInit();
  1220. this.closedia();
  1221. } else {
  1222. this.$message.error("操作失败");
  1223. }
  1224. });
  1225. },
  1226. // 初始化列表接口
  1227. handleInit() {
  1228. this.$http({
  1229. url: "/market/mkOnlineChannel/queryPage",
  1230. method: "post",
  1231. headers: {
  1232. "Content-Type": "application/json",
  1233. },
  1234. data: {
  1235. page: this.page,
  1236. pageSize: this.pageSize,
  1237. },
  1238. }).then(
  1239. ({
  1240. data: {
  1241. body: { data, count },
  1242. },
  1243. }) => {
  1244. this.total = count;
  1245. this.tableData = data;
  1246. console.log("===================================")
  1247. console.log(this.tableData)
  1248. }
  1249. );
  1250. },
  1251. // 注销
  1252. delDetails(id){
  1253. this.$confirm('确认注销吗?', '提示', {
  1254. confirmButtonText: '确定',
  1255. cancelButtonText: '取消',
  1256. type: 'warning'
  1257. }).then(() => {
  1258. this.$http({
  1259. url: "/market/mkOnlineChannel/delDetailsByWoNo",
  1260. method: "post",
  1261. headers: {
  1262. "Content-Type": "application/json",
  1263. },
  1264. data: id,
  1265. }).then(({ data }) => {
  1266. console.log("res======================================")
  1267. console.log(data)
  1268. console.log(data.result)
  1269. if (data && data.result === 0) {
  1270. this.$message.success(data.desc);
  1271. this.handleInit();
  1272. } else {
  1273. this.$message.error("操作失败");
  1274. }
  1275. });
  1276. }).catch(() => {
  1277. this.$message({
  1278. type: 'info',
  1279. message: '取消注销'
  1280. });
  1281. });
  1282. },
  1283. // 查看详情接口封装
  1284. queryDetails(id) {
  1285. this.$http({
  1286. url: "/market/mkOnlineChannel/getMkOnlineChannelById",
  1287. method: "post",
  1288. headers: {
  1289. "Content-Type": "application/json",
  1290. },
  1291. data: id,
  1292. }).then(
  1293. ({
  1294. data: {
  1295. body: { button, mkOnlineChannel },
  1296. },
  1297. }) => {
  1298. for (const i in mkOnlineChannel) {
  1299. if (mkOnlineChannel[i] === "undefined") {
  1300. mkOnlineChannel[i] = "";
  1301. }
  1302. }
  1303. this.infolist = {
  1304. ...mkOnlineChannel,
  1305. carryChannelCode: mkOnlineChannel.carryChannelCode
  1306. ? mkOnlineChannel.carryChannelCode.split(",")
  1307. : [],
  1308. opinion: ''
  1309. };
  1310. this.busiTime = [
  1311. mkOnlineChannel.busiStartTime,
  1312. mkOnlineChannel.busiEndTime,
  1313. ];
  1314. this.rovaList = mkOnlineChannel.logList;
  1315. this.datalist = {
  1316. ...this.datalist,
  1317. attList: mkOnlineChannel.attList,
  1318. };
  1319. this.file = [
  1320. ...mkOnlineChannel.attList.map((el) => ({
  1321. ...el,
  1322. name: el.fileName,
  1323. })),
  1324. ];
  1325. //表单编号
  1326. this.woNo = mkOnlineChannel.woNo;
  1327. // 步骤
  1328. this.step = mkOnlineChannel.step;
  1329. // 最后一步是否办结
  1330. this.tableSatus = mkOnlineChannel.sts;
  1331. this.dialogStatus = true;
  1332. if (this.titname === "添加") {
  1333. // 审批说明
  1334. this.visionsts = "";
  1335. this.disableStatus = false;
  1336. } else {
  1337. if (this.titname === "查看") {
  1338. this.buttonList = [];
  1339. this.disableStatus = true;
  1340. this.visionsts = "";
  1341. if (this.step === "9") {
  1342. this.vision = "信息补填";
  1343. this.getSupportList()
  1344. // 查看也不能操作数据
  1345. this.tableSatus = "4";
  1346. this.visionsts = "";
  1347. this.infodatas = mkOnlineChannel.workloadAndsupport.length
  1348. ? mkOnlineChannel.workloadAndsupport.map((el) => ({
  1349. factoryName: el.support,
  1350. workLoad: el.workload,
  1351. }))
  1352. : [
  1353. {
  1354. factoryName: "",
  1355. workLoad: "",
  1356. },
  1357. ];
  1358. }
  1359. } else {
  1360. this.buttonList = button;
  1361. // 这里就是审批
  1362. if (this.step === "0") {
  1363. this.disableStatus = false;
  1364. this.visionsts = "";
  1365. return;
  1366. }
  1367. this.disableStatus = true;
  1368. this.dialogStatus = true;
  1369. if (this.step === "9") {
  1370. // 这个是判断最后一步是否可以导入数据
  1371. if (this.buttonList[0] === "确认上线") {
  1372. this.vision = "信息补填";
  1373. this.visionsts = "";
  1374. this.getSupportList()
  1375. }
  1376. this.infodatas = mkOnlineChannel.workloadAndsupport.length
  1377. ? mkOnlineChannel.workloadAndsupport.map((el) => ({
  1378. factoryName: el.support,
  1379. workLoad: el.workload,
  1380. }))
  1381. : [
  1382. {
  1383. factoryName: "",
  1384. workLoad: "",
  1385. },
  1386. ];
  1387. } else {
  1388. this.vision = "";
  1389. this.visionsts = "2";
  1390. }
  1391. }
  1392. }
  1393. }
  1394. );
  1395. },
  1396. // 获取所有需求承接支撑方
  1397. getSupportList(){
  1398. this.$http({
  1399. url: "/market/cChannelContract/queryList",
  1400. method: "post",
  1401. headers: {
  1402. "Content-Type": "application/json",
  1403. },
  1404. data: {},
  1405. }).then((res) => {
  1406. this.supportList = res.data;
  1407. });
  1408. },
  1409. // 老方法
  1410. temp() {
  1411. if (JSON.stringify(this.infolist) == "{}") {
  1412. return;
  1413. }
  1414. let params = {};
  1415. params.infolist = this.infolist;
  1416. params.fileList = [];
  1417. params.attList = [];
  1418. this.attList.forEach((item) => {
  1419. let file = {
  1420. id: item.fileCode,
  1421. fileCode: item.fileCode,
  1422. fileName: item.fileName,
  1423. name: item.fileName,
  1424. };
  1425. params.fileList.push(file);
  1426. params.attList.push(file);
  1427. });
  1428. this.$http({
  1429. url: "/market/bpmTemp/temp",
  1430. method: "post",
  1431. headers: {
  1432. "Content-Type": "application/json",
  1433. },
  1434. data: {
  1435. bpmType: "1",
  1436. content: JSON.stringify(params),
  1437. },
  1438. }).then((res) => {
  1439. //console.log(res)
  1440. });
  1441. },
  1442. deletes(v) {
  1443. // this.treeListonly = {};
  1444. this.treeList = this.treeList.filter(
  1445. (el) => el.loginNoStr !== v.loginNoStr
  1446. );
  1447. this.closeList = !this.closeList;
  1448. },
  1449. treeCheckonly(v) {
  1450. this.treeList = v;
  1451. // this.treeListonly = v;
  1452. },
  1453. choline(v, n) {
  1454. if (v == 1) {
  1455. this.infodatas.push({factoryName:'',workLoad:''});
  1456. } else {
  1457. this.infodatas.splice(n.$index, 1);
  1458. }
  1459. },
  1460. closedia() {
  1461. // dialog回显信息
  1462. this.infolist = {};
  1463. // 图片
  1464. this.attList = [];
  1465. this.file = [];
  1466. // 审核人
  1467. this.treeList = [];
  1468. // 时间
  1469. this.busiTime = [];
  1470. // 领导人
  1471. this.checkLaeder = false;
  1472. // 审核领导
  1473. this.leader = "";
  1474. this.remark = "";
  1475. // 审批状态的图片
  1476. delete this.datalist.attList;
  1477. this.fileInfo.fileList = [];
  1478. // 弹出层
  1479. this.dialogStatus = false;
  1480. // 审核人
  1481. this.checkexa = false;
  1482. // 审核人单选是否开启
  1483. this.only = true;
  1484. },
  1485. //获取列表
  1486. getList(v, n) {
  1487. this.pageSize = n;
  1488. let _this = this;
  1489. this.loading = true;
  1490. v.procName = "业务需求申请(地市公司),业务需求申请(省公司)";
  1491. this.$http({
  1492. url: "/bpm/api/queryToDoAndFinishTaskList",
  1493. method: "post",
  1494. headers: {
  1495. "Content-Type": "application/json",
  1496. page: '{"pageNo":"' + n + '","pageSize":"10"}',
  1497. },
  1498. data: v,
  1499. }).then((res) => {
  1500. this.tableData = res.data.data;
  1501. this.total = res.data.totalRecord;
  1502. this.loading = false;
  1503. });
  1504. },
  1505. // 分页
  1506. currchange(v) {
  1507. this.page = v;
  1508. this.handleInit();
  1509. },
  1510. //申请 // 打开弹出层
  1511. dialogCheck(type, data) {
  1512. // let infolist = Object.assign({}, n);
  1513. this.vision = "";
  1514. this.visionsts = "";
  1515. if (type === 1) {
  1516. this.titname = "查看";
  1517. this.visionsts = "2";
  1518. this.queryDetails(data.woNo);
  1519. } else if (type === 2) {
  1520. this.titname = "审批";
  1521. this.visionsts = "2";
  1522. this.queryDetails(data.woNo);
  1523. } else if (type === 3) {
  1524. this.titname = "添加";
  1525. this.dialogStatus = true;
  1526. this.visionchonly = false;
  1527. this.disableStatus = false;
  1528. // this.$http({
  1529. // url: "/market/bpmTemp/query",
  1530. // method: "post",
  1531. // headers: { "Content-Type": "application/json" },
  1532. // data: { bpmType: "1" },
  1533. // }).then((res) => {
  1534. // if (res.data) {
  1535. // let content = JSON.parse(res.data.content);
  1536. // this.infolist = content.infolist;
  1537. // this.attList = content.attList;
  1538. // this.fileInfo.fileList = content.fileList;
  1539. // }
  1540. // // this.tempSave = true;
  1541. // });
  1542. // return;
  1543. } else if (type === 4) {
  1544. this.titname = "注销";
  1545. this.visionsts = "2";
  1546. this.delDetails(data.woNo);
  1547. }
  1548. // this.$http({
  1549. // url: "/bpm/api/taskInit",
  1550. // method: "post",
  1551. // headers: {
  1552. // "Content-Type": "application/json",
  1553. // },
  1554. // data: {
  1555. // woNo: n.woNo,
  1556. // },
  1557. // }).then((res) => {
  1558. // // this.infolist = Object.assign({}, res.data);
  1559. // this.terminal = infolist.procId;
  1560. // this.opname = res.data.opName;
  1561. // this.opno = res.data.opNo;
  1562. // this.infolist = JSON.parse(res.data.params.terminalRes);
  1563. // res.data.params.fillList
  1564. // ? (this.infodatas = JSON.parse(res.data.params.fillList))
  1565. // : "";
  1566. // this.infolist.procId = infolist.procId;
  1567. // this.infolist.procVersion = infolist.procVersion;
  1568. // this.remark = infolist.remark;
  1569. // this.infolist.stepId = infolist.stepId;
  1570. // this.infolist.taskId = infolist.taskId;
  1571. // this.infolist.taskName = infolist.taskName;
  1572. // this.infolist.opName = infolist.opName;
  1573. // this.infolist.opNo = infolist.opNo;
  1574. // this.infolist.opTime = infolist.opTime;
  1575. // this.infolist.woNo = infolist.woNo;
  1576. // this.busiTime = [];
  1577. // this.busiTime[0] = this.infolist.busiStartTime;
  1578. // this.busiTime[1] = this.infolist.busiEndTime;
  1579. // this.visionchonly = false;
  1580. // if (
  1581. // res.data.taskList[res.data.taskList.length - 1].taskName == "流程发起"
  1582. // ) {
  1583. // this.vision = "流程发起";
  1584. // if (this.titname == "审批") {
  1585. // this.disableStatus = false;
  1586. // }
  1587. // this.visionchonly = true;
  1588. // } else if (
  1589. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1590. // "科室主任初审"
  1591. // ) {
  1592. // this.vision = "科室主任初审";
  1593. // this.visionsts = "2";
  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. // res.data.taskList[res.data.taskList.length - 1].taskName ==
  1606. // "部门副主任终审"
  1607. // ) {
  1608. // this.vision = "主管副总终审";
  1609. // this.visionsts = "2";
  1610. // this.visionchonly = true;
  1611. // } else if (
  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. // this.vision = "需求确认";
  1643. // this.visionsts = "3";
  1644. // this.visionchonly = true;
  1645. // } else if (
  1646. // res.data.taskList[res.data.taskList.length - 1].taskName == "上线管理"
  1647. // ) {
  1648. // this.vision = "上线管理";
  1649. // this.visionsts = "3";
  1650. // this.visionchonly = true;
  1651. // } else if (
  1652. // res.data.taskList[res.data.taskList.length - 1].taskName == "上线验证"
  1653. // ) {
  1654. // this.vision = "上线验证";
  1655. // this.visionsts = "3";
  1656. // this.visionchonly = true;
  1657. // } else if (
  1658. // res.data.taskList[res.data.taskList.length - 1].taskName == "信息补填"
  1659. // ) {
  1660. // this.vision = "信息补填";
  1661. // this.visionsts = "4";
  1662. // }
  1663. // this.datalist.attList = JSON.parse(res.data.params.attList);
  1664. // this.attList = [];
  1665. // this.fileInfo.fileList = [];
  1666. // this.datalist.attList.forEach((item) => {
  1667. // item.id = item.attchFileId;
  1668. // this.fileInfo.fileList.push({
  1669. // name: item.fileName,
  1670. // url: "",
  1671. // id: item.id,
  1672. // attchFileId: item.attchFileId,
  1673. // fileName: item.fileName,
  1674. // });
  1675. // this.attList.push({
  1676. // name: item.fileName,
  1677. // url: "",
  1678. // id: item.id,
  1679. // attchFileId: item.attchFileId,
  1680. // fileName: item.fileName,
  1681. // });
  1682. // });
  1683. // this.rovaList = res.data.taskList;
  1684. // this.uploadstatus = true;
  1685. // });
  1686. },
  1687. //审批
  1688. dialogCli(v) {
  1689. this.dialogStatus = false;
  1690. if (v === 3) {
  1691. this.infolist = {};
  1692. this.attList = [];
  1693. this.fileInfo.fileList = [];
  1694. this.checkexa = false;
  1695. this.tempSave = false;
  1696. return;
  1697. }
  1698. let _this = this;
  1699. this.infolist.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
  1700. if (v === 1) {
  1701. let params = {
  1702. dealType: "1",
  1703. dealTypeDesc: "打回",
  1704. procId: this.infolist.procId,
  1705. procVersion: this.infolist.procVersion,
  1706. remark: this.remark,
  1707. stepId: this.infolist.stepId,
  1708. taskId: this.infolist.taskId,
  1709. taskName: this.infolist.taskName,
  1710. opName: this.infolist.opName,
  1711. opNo: this.opno,
  1712. opTime: this.infolist.opTime,
  1713. params: {
  1714. procExeCondiVal: "不同意",
  1715. terminalRes: JSON.stringify(this.infolist),
  1716. assigneeNo: this.opno,
  1717. assigneeName: this.opname,
  1718. },
  1719. woNo: this.infolist.woNo,
  1720. };
  1721. this.submitInfo("/bpm/api/submitTask", params);
  1722. } else if (v === 2) {
  1723. let param = {
  1724. dealType: "0",
  1725. dealTypeDesc: "提交",
  1726. procId: this.infolist.procId,
  1727. procVersion: this.infolist.procVersion,
  1728. remark: this.remark,
  1729. stepId: this.infolist.stepId,
  1730. taskId: this.infolist.taskId,
  1731. taskName: this.infolist.taskName,
  1732. opName: this.infolist.opName,
  1733. opNo: this.opno,
  1734. opTime: this.infolist.opTime,
  1735. params: {
  1736. woType: this.infolist.woType,
  1737. terminalRes: JSON.stringify(this.infolist),
  1738. },
  1739. woNo: this.infolist.woNo,
  1740. };
  1741. if (this.visionchonly) {
  1742. param.params.assigneeNo = this.treeListonly.leaderAuditNo;
  1743. param.params.assigneeName = this.treeListonly.leaderAuditName;
  1744. }
  1745. // if(this.vision == '科室主任初审'||this.vision == '部门副主任复审'){
  1746. // this.$http({
  1747. // url: "/sysmgr/csysuserinfo/queryUserListByLoginNoAndDuty",
  1748. // method: "post",
  1749. // headers: {
  1750. // "Content-Type": "application/json",
  1751. // "page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
  1752. // },
  1753. // data: {"duty":"7,12"},
  1754. // }).then((res) => {
  1755. // if(res.data.length == 0){
  1756. // this.$message({
  1757. // message: '暂无领导审批,发起失败!',
  1758. // type: 'error'
  1759. // });
  1760. // return
  1761. // }else{
  1762. // param.params.assigneeNo=res.data[0].loginNoStr;
  1763. // param.params.assigneeName=res.data[0].loginNameStr;
  1764. // _this.submitInfo("/bpm/api/submitTask", param);
  1765. // return
  1766. // }
  1767. // });
  1768. // }else if(this.vision == '渠道经理会签'||this.vision == '上线管理'){
  1769. // param.params.assigneeNo= this.opno;
  1770. // param.params.assigneeName= this.opname;
  1771. // this.submitInfo("/bpm/api/submitTask", param);
  1772. // }
  1773. if (this.vision == "信息补填") {
  1774. param.params.fillList = JSON.stringify(this.infodatas);
  1775. this.submitInfo("/bpm/api/submitTask", param);
  1776. } else {
  1777. if (this.vision == "流程发起") {
  1778. let attList = [];
  1779. for (let i = 0; i < this.attList.length; i++) {
  1780. attList.push({
  1781. id: this.attList[i].id,
  1782. fileCode: this.attList[i].fileCode,
  1783. fileName: this.attList[i].fileName,
  1784. opName: this.attList[i].opName,
  1785. opNo: this.attList[i].opNo,
  1786. opTime: this.attList[i].opTime,
  1787. woNo: this.infolist.woNo,
  1788. attchFileId: this.attList[i].attchFileId,
  1789. });
  1790. }
  1791. param.params.attList = JSON.stringify(attList);
  1792. this.$http({
  1793. url: "/market/bpmTemp/del",
  1794. method: "post",
  1795. headers: {
  1796. "Content-Type": "application/json",
  1797. },
  1798. data: {
  1799. bpmType: "1",
  1800. },
  1801. }).then((res) => {
  1802. //console.log(res)
  1803. });
  1804. }
  1805. this.submitInfo("/bpm/api/submitTask", param);
  1806. }
  1807. }
  1808. this.checkexa = false;
  1809. },
  1810. //添加
  1811. dialogCliadd(v) {
  1812. let _this = this;
  1813. let info = {};
  1814. info.params = {};
  1815. info.opTime = _this.$formatDate(new Date(), "YYYY-MM-DD");
  1816. info.opNo = this.userInfo.loginNo;
  1817. info.opName = this.userInfo.loginName;
  1818. info.woTitle = this.infolist.demandName;
  1819. info.params.terminalRes = this.infolist;
  1820. info.params.terminalRes.busiStartTime = this.busiTime[0]
  1821. ? _this.$formatDate(this.busiTime[0], "YYYY-MM-DD")
  1822. : "";
  1823. info.params.terminalRes.busiEndTime = this.busiTime[1]
  1824. ? _this.$formatDate(this.busiTime[1], "YYYY-MM-DD")
  1825. : "";
  1826. info.procId = this.terminal;
  1827. info.params.assigneeNo = this.treeListonly.leaderAuditNo;
  1828. info.params.assigneeName = this.treeListonly.leaderAuditName;
  1829. for (let i = 0; i < this.options.length; i++) {
  1830. if (this.terminal == this.options[i].procId) {
  1831. info.procName = this.options[i].procName;
  1832. info.procVersion = this.options[i].procVersion;
  1833. }
  1834. }
  1835. let attList = [];
  1836. for (let i = 0; i < this.attList.length; i++) {
  1837. attList.push({
  1838. id: this.attList[i].id,
  1839. fileCode: this.attList[i].fileCode,
  1840. fileName: this.attList[i].fileName,
  1841. opName: this.attList[i].opName,
  1842. opNo: this.attList[i].opNo,
  1843. opTime: this.attList[i].opTime,
  1844. woNo: this.infolist.woNo,
  1845. attchFileId: this.attList[i].attchFileId,
  1846. });
  1847. }
  1848. let fillList = [{}, {}];
  1849. info.params.fillList = JSON.stringify(fillList);
  1850. info.params.attList = JSON.stringify(attList);
  1851. info.params.terminalRes = JSON.stringify(info.params.terminalRes);
  1852. this.checkexa = false;
  1853. this.visionchonly = false;
  1854. this.submitInfo("/bpm/api/startProc", info);
  1855. },
  1856. submitInfo(u, v) {
  1857. let _this = this;
  1858. this.$refs.infolist.validate((valid) => {
  1859. if (valid) {
  1860. this.$http({
  1861. url: u,
  1862. method: "post",
  1863. headers: {
  1864. "Content-Type": "application/json",
  1865. },
  1866. data: v,
  1867. }).then((res) => {
  1868. if (res.data.result === 1) {
  1869. _this.$message({
  1870. message: res.data.desc,
  1871. type: "error",
  1872. });
  1873. } else {
  1874. _this.$message({
  1875. message: "成功",
  1876. type: "success",
  1877. });
  1878. _this.closedia();
  1879. _this.infolist = {};
  1880. _this.attList = [];
  1881. _this.fileInfo.fileList = [];
  1882. _this.getList(this.params, this.pageSize);
  1883. }
  1884. });
  1885. }
  1886. });
  1887. },
  1888. getStanding() {
  1889. this.$router.push({
  1890. path: "/ywStanding",
  1891. });
  1892. this.setabList("线上业务需求台账", "/ywStanding");
  1893. },
  1894. setabList(n, p) {
  1895. let params = {
  1896. children: "",
  1897. name: n,
  1898. rountPath: p,
  1899. target: "_self",
  1900. };
  1901. for (let i = 0; i < this.$store.state.tabList.length; i++) {
  1902. if (this.$store.state.tabList[i].name === params.name) {
  1903. this.$store.state.tabList[i] = params;
  1904. }
  1905. }
  1906. let set = new Set([...this.$store.state.tabList, params]);
  1907. set.add(params);
  1908. this.$store.commit("setDefaultActive", params.rountPath);
  1909. this.$store.commit("setTabList", Array.from(set));
  1910. },
  1911. //流程
  1912. getTermianl() {
  1913. this.$http({
  1914. url: "/bpm/api/queryBpmProcList",
  1915. method: "post",
  1916. headers: {
  1917. "Content-Type": "application/json",
  1918. page: '{"pageNo":"' + 1 + '","pageSize":"100"}',
  1919. },
  1920. data: {},
  1921. }).then((res) => {
  1922. this.options = res.data.data;
  1923. });
  1924. },
  1925. closeMessage(v) {
  1926. this.centerDialogVisible = false;
  1927. let _this = this;
  1928. if (v === 1) {
  1929. _this
  1930. .$http({
  1931. url: "/bpm/api/deleteBpmPrePlugin",
  1932. method: "post",
  1933. headers: {
  1934. "Content-Type": "application/json",
  1935. },
  1936. data: {
  1937. id: this.delid,
  1938. },
  1939. })
  1940. .then((res) => {
  1941. if (res.data.result === 1) {
  1942. _this.$message({
  1943. message: res.data.desc,
  1944. type: "error",
  1945. });
  1946. } else {
  1947. _this.$message({
  1948. message: "删除成功",
  1949. type: "success",
  1950. });
  1951. _this.getList(this.params, this.pageSize);
  1952. }
  1953. });
  1954. }
  1955. },
  1956. //删除
  1957. delLine(v) {
  1958. this.centerDialogVisible = true;
  1959. this.messTit = "即将删除此条数据, 是否删除?";
  1960. this.delid = v.id;
  1961. },
  1962. //文件返回值
  1963. uploadBack(v) {
  1964. this.attList = v;
  1965. },
  1966. uploadBackin(v) {
  1967. console.log(v, "v");
  1968. let x = [];
  1969. for (let i = 1; i < v.data.body.length; i++) {
  1970. x.push({
  1971. factoryName: v.data.body[i].factoryName,
  1972. workLoad: v.data.body[i].workLoad,
  1973. });
  1974. }
  1975. this.infodatas = x;
  1976. },
  1977. //功能栏
  1978. iconCli(v) {
  1979. if (v === 1) {
  1980. this.handleInit();
  1981. }
  1982. if (v === 2) {
  1983. this.fullscreen = !this.fullscreen;
  1984. }
  1985. },
  1986. getUser() {
  1987. this.userInfo = JSON.parse(window.sessionStorage.userInfo);
  1988. },
  1989. // 字典
  1990. // 需求类别 demandType
  1991. // 承载渠道 demandChnl
  1992. getsaleChnl() {
  1993. this.$http({
  1994. url: "/market/cfgDataDict/queryList",
  1995. method: "post",
  1996. headers: {
  1997. "Content-Type": "application/json",
  1998. },
  1999. data: {
  2000. dictCode: "demandType",
  2001. },
  2002. }).then((res) => {
  2003. this.demandTypeopt = res.data;
  2004. });
  2005. this.$http({
  2006. url: "/market/cfgDataDict/queryList",
  2007. method: "post",
  2008. headers: {
  2009. "Content-Type": "application/json",
  2010. },
  2011. data: {
  2012. dictCode: "demandChnl",
  2013. },
  2014. }).then((res) => {
  2015. this.carryChannelopt = res.data;
  2016. });
  2017. },
  2018. ywStandingAuth(){
  2019. this.$http({
  2020. url: "/market/mkOnlineChannel/ywStandingAuth",
  2021. method: "post",
  2022. headers: {
  2023. "Content-Type": "application/json",
  2024. },
  2025. }).then((res) => {
  2026. this.standingAuth = res.data.body;
  2027. });
  2028. }
  2029. },
  2030. mounted() {
  2031. // 调用初始化接口
  2032. this.handleInit();
  2033. // this.getList({}, 1);
  2034. this.getUser();
  2035. this.getTermianl();
  2036. this.getsaleChnl();
  2037. },
  2038. created() { this.ywStandingAuth()},
  2039. };
  2040. </script>
  2041. <style scoped lang="scss">
  2042. .onetab {
  2043. margin-bottom: 20px;
  2044. padding: 0 20px;
  2045. }
  2046. .simple-dialog {
  2047. position: relative;
  2048. min-height: 90vh;
  2049. }
  2050. .info {
  2051. &-footer {
  2052. display: flex;
  2053. margin-top: 50px;
  2054. justify-content: flex-end;
  2055. margin-bottom: 50px;
  2056. }
  2057. &-upload {
  2058. width: 500px !important;
  2059. position: relative;
  2060. }
  2061. }
  2062. .titbox {
  2063. div {
  2064. float: right;
  2065. i {
  2066. font-size: 22px;
  2067. margin-left: 20px;
  2068. cursor: pointer;
  2069. }
  2070. }
  2071. }
  2072. .upload {
  2073. position: relative;
  2074. left: calc(50% - 229px / 2);
  2075. top: -4px;
  2076. display: flex !important;
  2077. flex-direction: column;
  2078. }
  2079. .tabbox {
  2080. margin-top: 15px;
  2081. }
  2082. .pageBox {
  2083. text-align: right;
  2084. margin-top: 10px;
  2085. }
  2086. .info-line {
  2087. width: 100%;
  2088. display: block;
  2089. padding-left: 20px;
  2090. div {
  2091. width: 50%;
  2092. display: inline-block;
  2093. }
  2094. span {
  2095. width: 100px;
  2096. display: inline-block;
  2097. text-align: left;
  2098. i {
  2099. color: red;
  2100. display: inline-block;
  2101. padding-right: 5px;
  2102. }
  2103. }
  2104. .el-select,
  2105. .el-input {
  2106. width: calc(100% - 120px);
  2107. }
  2108. }
  2109. .online {
  2110. width: 100%;
  2111. .el-select {
  2112. width: calc(100% - 100px);
  2113. }
  2114. span {
  2115. vertical-align: top;
  2116. }
  2117. .el-textarea {
  2118. width: calc(100% - 120px);
  2119. }
  2120. .tree {
  2121. width: calc(50% - 60px);
  2122. display: inline-block;
  2123. margin-right: 20px;
  2124. height: 300px;
  2125. overflow-y: scroll;
  2126. .el-icon-error {
  2127. float: right;
  2128. font-size: 20px;
  2129. margin-top: 9px;
  2130. cursor: pointer;
  2131. }
  2132. }
  2133. .treeUser {
  2134. margin: 0;
  2135. border: 1px solid #ddd;
  2136. p {
  2137. background: #f4f4f4;
  2138. padding: 0 20px;
  2139. border-bottom: 1px solid #fff;
  2140. }
  2141. }
  2142. .treeUserb {
  2143. width: calc(100% - 100px);
  2144. border: 1px solid #ddd;
  2145. background: #f4f4f4;
  2146. border-radius: 3px;
  2147. height: auto;
  2148. overflow: hidden;
  2149. p {
  2150. display: inline-block;
  2151. padding: 0 20px;
  2152. // margin-bottom: 5px;
  2153. }
  2154. }
  2155. }
  2156. .adv-type {
  2157. margin-top: 20px;
  2158. display: flex;
  2159. justify-content: space-between;
  2160. flex-wrap: wrap;
  2161. // border: 1px solid #ddd;
  2162. border-radius: 5px;
  2163. padding: 20px;
  2164. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  2165. div {
  2166. width: 33%;
  2167. text-align: center;
  2168. height: 80px;
  2169. overflow: hidden;
  2170. min-width: 100px;
  2171. cursor: pointer;
  2172. padding-top: 10px;
  2173. margin: 10px 0;
  2174. }
  2175. div:hover {
  2176. background: #cfe8fc;
  2177. border-radius: 5px;
  2178. }
  2179. span {
  2180. width: 100%;
  2181. display: inline-block;
  2182. height: 40px;
  2183. // line-height: 40px;
  2184. i {
  2185. color: #0074d9;
  2186. font-size: 36px;
  2187. }
  2188. }
  2189. }
  2190. </style>