index.vue 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405
  1. <template>
  2. <div class="app-container">
  3. <!-- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="计划名称" prop="planName">
  5. <el-input
  6. v-model="queryParams.planName"
  7. placeholder="请输入计划名称"
  8. clearable
  9. size="small"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item label="计划开始时间" prop="planStartTime">
  14. <el-date-picker clearable size="small"
  15. v-model="queryParams.planStartTime"
  16. type="date"
  17. value-format="yyyy-MM-dd"
  18. placeholder="选择计划开始时间">
  19. </el-date-picker>
  20. </el-form-item>
  21. <el-form-item label="计划结束时间" prop="planEndTime">
  22. <el-date-picker clearable size="small"
  23. v-model="queryParams.planEndTime"
  24. type="date"
  25. value-format="yyyy-MM-dd"
  26. placeholder="选择计划结束时间">
  27. </el-date-picker>
  28. </el-form-item>
  29. <el-form-item label="计划简介" prop="planIntroduction">
  30. <el-input
  31. v-model="queryParams.planIntroduction"
  32. placeholder="请输入计划简介"
  33. clearable
  34. size="small"
  35. @keyup.enter.native="handleQuery"
  36. />
  37. </el-form-item>
  38. <el-form-item label="文件路径" prop="filePath">
  39. <el-input
  40. v-model="queryParams.filePath"
  41. placeholder="请输入文件路径"
  42. clearable
  43. size="small"
  44. @keyup.enter.native="handleQuery"
  45. />
  46. </el-form-item>
  47. <el-form-item label="文件名称" prop="fileName">
  48. <el-input
  49. v-model="queryParams.fileName"
  50. placeholder="请输入文件名称"
  51. clearable
  52. size="small"
  53. @keyup.enter.native="handleQuery"
  54. />
  55. </el-form-item>
  56. <el-form-item label="创建人" prop="createName">
  57. <el-input
  58. v-model="queryParams.createName"
  59. placeholder="请输入创建人"
  60. clearable
  61. size="small"
  62. @keyup.enter.native="handleQuery"
  63. />
  64. </el-form-item>
  65. <el-form-item label="创建人id" prop="createId">
  66. <el-input
  67. v-model="queryParams.createId"
  68. placeholder="请输入创建人id"
  69. clearable
  70. size="small"
  71. @keyup.enter.native="handleQuery"
  72. />
  73. </el-form-item>
  74. <el-form-item label="需响应计划数" prop="planNumber">
  75. <el-input
  76. v-model="queryParams.planNumber"
  77. placeholder="请输入需响应计划数"
  78. clearable
  79. size="small"
  80. @keyup.enter.native="handleQuery"
  81. />
  82. </el-form-item>
  83. <el-form-item label="已响应计划数" prop="responseNumber">
  84. <el-input
  85. v-model="queryParams.responseNumber"
  86. placeholder="请输入已响应计划数"
  87. clearable
  88. size="small"
  89. @keyup.enter.native="handleQuery"
  90. />
  91. </el-form-item>
  92. <el-form-item label="单位id" prop="unitId">
  93. <el-input
  94. v-model="queryParams.unitId"
  95. placeholder="请输入单位id"
  96. clearable
  97. size="small"
  98. @keyup.enter.native="handleQuery"
  99. />
  100. </el-form-item>
  101. <el-form-item label="计划状态(0进行中,1已完成,2已审批,3已驳回)" prop="state">
  102. <el-input
  103. v-model="queryParams.state"
  104. placeholder="请输入计划状态(0进行中,1已完成,2已审批,3已驳回)"
  105. clearable
  106. size="small"
  107. @keyup.enter.native="handleQuery"
  108. />
  109. </el-form-item>
  110. <el-form-item>
  111. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  112. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  113. </el-form-item>
  114. </el-form>-->
  115. <el-row :gutter="20">
  116. <el-col :span="4" :xs="24">
  117. <div class="dadui">
  118. <img src="../../../images/星星.png" alt />
  119. 大队
  120. </div>
  121. <div class="tree">
  122. <el-tree
  123. class="userAgrees"
  124. style="height: calc(100vh - 170px); overflow: auto"
  125. :data="deptOptions"
  126. :props="defaultProps"
  127. @node-click="handleNodeClick"
  128. default-expand-all
  129. highlight-current
  130. :expand-on-click-node="false"
  131. ></el-tree>
  132. </div>
  133. </el-col>
  134. <el-col :span="2" class="mb8">
  135. <div class="shuJu" @click="dengJI">
  136. <!-- <span class="box44 public"> 当前数据为 : {{ time }}</span> -->
  137. <span class="box5 public"> 已响应部门 : {{ yishenpi }}</span>
  138. <span class="box6"> 未响应部门 : {{ weishenpi }}</span>
  139. </div>
  140. <!-- <el-button
  141. v-show="true"
  142. type="primary"
  143. plain
  144. icon="el-icon-plus"
  145. size="mini"
  146. @click="handleAdd"
  147. v-hasPermi="['thought:thoughtPlan:add']"
  148. >新增</el-button
  149. > -->
  150. </el-col>
  151. <el-col :span="1.5">
  152. <!-- <el-button
  153. type="success"
  154. plain
  155. icon="el-icon-edit"
  156. size="mini"
  157. :disabled="single"
  158. @click="handleUpdate"
  159. v-hasPermi="['thought:thoughtPlan:edit']"
  160. >修改</el-button
  161. > -->
  162. </el-col>
  163. <el-col :span="1.5">
  164. <!-- <el-button
  165. type="danger"
  166. plain
  167. icon="el-icon-delete"
  168. size="mini"
  169. :disabled="multiple"
  170. @click="handleDelete"
  171. v-hasPermi="['thought:thoughtPlan:remove']"
  172. >删除</el-button
  173. > -->
  174. </el-col>
  175. <el-col :span="1.5">
  176. <!-- <el-button
  177. type="warning"
  178. plain
  179. icon="el-icon-download"
  180. size="mini"
  181. :loading="exportLoading"
  182. @click="handleExport"
  183. v-hasPermi="['thought:thoughtPlan:export']"
  184. >导出</el-button
  185. > -->
  186. </el-col>
  187. <!-- </el-row> -->
  188. <el-col :span="20" :xs="24">
  189. <el-table
  190. v-loading="loading"
  191. :header-cell-style="{ background: '#003C69', color: 'white' }"
  192. :data="thoughtPlanList"
  193. max-width="10"
  194. @selection-change="handleSelectionChange"
  195. >
  196. <el-table-column type="selection" width="55" align="center" />
  197. <el-table-column label="序号" align="center" type="index" />
  198. <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
  199. <el-table-column label="计划名称" align="center" prop="planName" />
  200. <el-table-column
  201. label="计划简介"
  202. align="center"
  203. prop="planIntroduction"
  204. show-overflow-tooltip
  205. />
  206. <el-table-column
  207. label="计划开始时间"
  208. align="center"
  209. prop="planStartTime"
  210. width="120"
  211. >
  212. <template slot-scope="scope">
  213. <span>{{
  214. parseTime(scope.row.planStartTime, "{y}-{m}-{d}")
  215. }}</span>
  216. </template>
  217. </el-table-column>
  218. <el-table-column
  219. label="计划结束时间"
  220. align="center"
  221. prop="planEndTime"
  222. width="120"
  223. >
  224. <template slot-scope="scope">
  225. <span>{{ parseTime(scope.row.planEndTime, "{y}-{m}-{d}") }}</span>
  226. </template>
  227. </el-table-column>
  228. <!-- <el-table-column label="计划个数" align="center" prop="planNumber" /> -->
  229. <el-table-column
  230. label="需响应计划数"
  231. align="center"
  232. prop="planNumber"
  233. />
  234. <el-table-column
  235. label="已响应计划数"
  236. align="center"
  237. prop="responseNumber"
  238. />
  239. <el-table-column label="计划状态" align="center" prop="state">
  240. <template slot-scope="scope">
  241. <span v-if="scope.row.state == '0'" style="color: #00eaff"
  242. >未响应</span
  243. >
  244. <span v-if="scope.row.state == '1'" style="color: #ffba00"
  245. >待审批</span
  246. >
  247. <span v-if="scope.row.state == '2'" style="color: #13ce66"
  248. >已审批</span
  249. >
  250. <span
  251. v-if="scope.row.state == '3'"
  252. style="color: #ff4949"
  253. :title="scope.row.reasons"
  254. >已驳回</span
  255. >
  256. <span v-if="scope.row.state == '4'" style="color: #00eaff"
  257. >进行中</span
  258. >
  259. </template>
  260. </el-table-column>
  261. <el-table-column
  262. label="创建时间"
  263. align="center"
  264. prop="createTime"
  265. width="120"
  266. >
  267. <template slot-scope="scope">
  268. <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
  269. </template>
  270. </el-table-column>
  271. <el-table-column
  272. fixed="right"
  273. width="200"
  274. label="操作"
  275. align="left"
  276. class-name="small-padding fixed-width"
  277. >
  278. <template slot-scope="scope">
  279. <el-button
  280. v-if="scope.row.state == '1'"
  281. size="btc"
  282. type="text"
  283. @click="handleUpdate1(scope.row)"
  284. v-hasPermi="['thought:responses:edit']"
  285. >审批</el-button
  286. >
  287. <el-button
  288. size="btc"
  289. type="text"
  290. @click="handleUpdate(scope.row)"
  291. v-hasPermi="['thought:responses:edit']"
  292. >查看</el-button
  293. >
  294. <!-- <el-button
  295. size="btc"
  296. type="text"
  297. @click="handleDelete(scope.row)"
  298. v-hasPermi="['thought:thoughtPlan:remove']"
  299. >删除</el-button
  300. > -->
  301. </template>
  302. </el-table-column>
  303. </el-table>
  304. <pagination
  305. v-show="total > 0"
  306. :total="total"
  307. :page.sync="queryParams.pageNum"
  308. :limit.sync="queryParams.pageSize"
  309. @pagination="getList"
  310. />
  311. </el-col>
  312. </el-row>
  313. <!-- 添加或修改月教育计划对话框 -->
  314. <el-dialog
  315. :title="title"
  316. :visible.sync="open"
  317. width="1200px"
  318. append-to-body
  319. >
  320. <!-- <el-form
  321. ref="form"
  322. :model="form"
  323. :rules="rules"
  324. :inline="true"
  325. label-width="100px"
  326. >
  327. <div class="jiben">文档信息</div>
  328. <el-form-item label="计划名称" prop="planName">
  329. <el-input v-model="form.planName" placeholder="请输入计划名称" />
  330. </el-form-item>
  331. <el-form-item label="计划开始时间" prop="planStartTime">
  332. <el-date-picker
  333. clearable
  334. size="small"
  335. v-model="form.planStartTime"
  336. type="date"
  337. value-format="yyyy-MM-dd"
  338. placeholder="选择计划开始时间"
  339. ></el-date-picker>
  340. </el-form-item>
  341. <el-form-item label="计划结束时间" prop="planEndTime">
  342. <el-date-picker
  343. clearable
  344. size="small"
  345. v-model="form.planEndTime"
  346. type="date"
  347. value-format="yyyy-MM-dd"
  348. placeholder="选择计划结束时间"
  349. ></el-date-picker>
  350. </el-form-item>
  351. <el-form-item label="计划简介" prop="planIntroduction">
  352. <el-input
  353. type="textarea"
  354. v-model="form.planIntroduction"
  355. placeholder="请输入计划简介"
  356. />
  357. </el-form-item>
  358. <div class="jiben">计划条数</div>
  359. <div class="jiHua">
  360. <el-form v-for="(item1, e) in checkShop" :key="e">
  361. <el-form-item prop="remark">
  362. <el-input
  363. type="textarea"
  364. v-model="form.planIntroduction"
  365. placeholder="请输入计划详情"
  366. />
  367. <el-radio v-model="radio" label="1">是否需要响应</el-radio>
  368. <el-button
  369. type="primary"
  370. icon="el-icon-plus"
  371. size="mini"
  372. @click="addForms"
  373. v-if="e == checkShop.length - 1"
  374. ></el-button>
  375. <el-button
  376. type="primary"
  377. icon="el-icon-delete"
  378. size="mini"
  379. v-if="e > 0"
  380. @click="delForms(e)"
  381. ></el-button>
  382. </el-form-item>
  383. </el-form>
  384. </div>
  385. <div class="jiben">文件</div>
  386. <el-form-item>
  387. <FileUpload v-model="form.fileName" />
  388. </el-form-item>
  389. </el-form> -->
  390. <div slot="footer" class="dialog-footer">
  391. <el-button type="primary" @click="submitForm">确 定</el-button>
  392. <el-button @click="cancel">取 消</el-button>
  393. </div>
  394. </el-dialog>
  395. <!-- 审批月教育计划响应对话框 -->
  396. <el-dialog
  397. title="审批月教育计划"
  398. :visible.sync="open2"
  399. width="1064px"
  400. append-to-body
  401. :close-on-click-modal="false"
  402. >
  403. <div class="userAgree">
  404. <el-form
  405. ref="form2"
  406. :model="form"
  407. :rules="rules2"
  408. :inline="true"
  409. label-width="100px"
  410. >
  411. <div class="jiben">文档信息</div>
  412. <el-form-item label="计划名称" prop="planName">
  413. <el-input
  414. v-model="form.planName"
  415. placeholder="请输入计划名称"
  416. readonly
  417. />
  418. </el-form-item>
  419. <el-form-item label="计划开始时间" prop="planStartTime">
  420. <el-date-picker
  421. clearable
  422. size="small"
  423. v-model="form.planStartTime"
  424. type="date"
  425. value-format="yyyy-MM-dd"
  426. placeholder="选择计划开始时间"
  427. readonly
  428. ></el-date-picker>
  429. </el-form-item>
  430. <el-form-item label="计划结束时间" prop="planEndTime">
  431. <el-date-picker
  432. clearable
  433. size="small"
  434. v-model="form.planEndTime"
  435. type="date"
  436. value-format="yyyy-MM-dd"
  437. placeholder="选择计划结束时间"
  438. readonly
  439. ></el-date-picker>
  440. </el-form-item>
  441. <div class="jiben">计划简介</div>
  442. <el-form-item label="" prop="planIntroduction">
  443. <el-input
  444. type="textarea"
  445. v-model="form.planIntroduction"
  446. placeholder="请输入计划简介"
  447. readonly
  448. autosize
  449. />
  450. </el-form-item>
  451. <div class="jiben">计划条数</div>
  452. <div class="jiHua">
  453. <el-form v-for="(item, e) in checkShop" :key="e">
  454. <span
  455. style="
  456. color: #13ce66;
  457. margin-bottom: 9px;
  458. display: inline-block;
  459. "
  460. v-if="item.isresponse == '1'"
  461. >此条计划需各单位配合执行</span
  462. >
  463. <span
  464. style="
  465. color: #ff4949;
  466. margin-bottom: 9px;
  467. display: inline-block;
  468. "
  469. v-if="item.isresponse == '0'"
  470. >此条计划非必要,各单位根据实际执行</span
  471. >
  472. <el-form-item prop="remark">
  473. <el-input
  474. type="textarea"
  475. v-model="item.planContent"
  476. placeholder="请输入计划详情"
  477. readonly
  478. autosize
  479. />
  480. </el-form-item>
  481. </el-form>
  482. </div>
  483. <div class="jiben" v-if="planResponsefus.length != 0">文件</div>
  484. <el-form v-for="(item, i) in planResponsefus" :key="i">
  485. <el-form-item prop="file">
  486. <el-input
  487. label="附件名称"
  488. v-model="item.fileName"
  489. style="width: 260px"
  490. readonly
  491. />
  492. <a
  493. :href="item.filePath"
  494. download
  495. title="下载"
  496. style="color: white; margin-left: -58px"
  497. class="downloadfile"
  498. >下载附件</a
  499. >
  500. </el-form-item>
  501. </el-form>
  502. <div class="jiben">审批驳回原因</div>
  503. <el-form-item prop="reasons">
  504. <el-input v-model="form.reasons" type="textarea" />
  505. </el-form-item>
  506. </el-form>
  507. </div>
  508. <div slot="footer" class="dialog-footer">
  509. <el-button type="primary" @click="submitForm1">通过</el-button>
  510. <el-button @click="submitFormBoHui" size="btn">驳回</el-button>
  511. </div>
  512. </el-dialog>
  513. <!-- 查看月教育计划响应对话框 -->
  514. <el-dialog
  515. title="查看月教育计划"
  516. :visible.sync="open3"
  517. width="1064px"
  518. append-to-body
  519. :close-on-click-modal="false"
  520. >
  521. <div class="userAgree">
  522. <el-form
  523. ref="form3"
  524. :model="form"
  525. :rules="rules3"
  526. :inline="true"
  527. label-width="100px"
  528. >
  529. <div class="jiben">文档信息</div>
  530. <el-form-item label="计划名称" prop="planName">
  531. <el-input
  532. v-model="form.planName"
  533. placeholder="请输入计划名称"
  534. readonly
  535. />
  536. </el-form-item>
  537. <el-form-item label="计划开始时间" prop="planStartTime">
  538. <el-date-picker
  539. clearable
  540. size="small"
  541. v-model="form.planStartTime"
  542. type="date"
  543. value-format="yyyy-MM-dd"
  544. placeholder="选择计划开始时间"
  545. readonly
  546. ></el-date-picker>
  547. </el-form-item>
  548. <el-form-item label="计划结束时间" prop="planEndTime">
  549. <el-date-picker
  550. clearable
  551. size="small"
  552. v-model="form.planEndTime"
  553. type="date"
  554. value-format="yyyy-MM-dd"
  555. placeholder="选择计划结束时间"
  556. readonly
  557. ></el-date-picker>
  558. </el-form-item>
  559. <div class="jiben">计划简介</div>
  560. <el-form-item label="" prop="planIntroduction">
  561. <el-input
  562. type="textarea"
  563. v-model="form.planIntroduction"
  564. placeholder="请输入计划简介"
  565. readonly
  566. autosize
  567. />
  568. </el-form-item>
  569. <div class="jiben">计划条数</div>
  570. <div class="jiHua">
  571. <el-form v-for="(item, e) in checkShop" :key="e">
  572. <span
  573. style="
  574. color: #13ce66;
  575. margin-bottom: 9px;
  576. display: inline-block;
  577. "
  578. v-if="item.isresponse == '1'"
  579. >此条计划需各单位配合执行</span
  580. >
  581. <span
  582. style="
  583. color: #ff4949;
  584. margin-bottom: 9px;
  585. display: inline-block;
  586. "
  587. v-if="item.isresponse == '0'"
  588. >此条计划非必要,各单位根据实际执行</span
  589. >
  590. <el-form-item prop="remark">
  591. <el-input
  592. type="textarea"
  593. v-model="item.planContent"
  594. placeholder="请输入计划详情"
  595. readonly
  596. autosize
  597. />
  598. </el-form-item>
  599. </el-form>
  600. </div>
  601. <div class="jiben" v-if="planResponsefus.length != 0">文件</div>
  602. <el-form v-for="(item, i) in planResponsefus" :key="i">
  603. <el-form-item prop="file">
  604. <el-input
  605. label="附件名称"
  606. v-model="item.fileName"
  607. style="width: 260px"
  608. readonly
  609. />
  610. <a
  611. :href="item.filePath"
  612. download
  613. title="下载"
  614. style="color: white; margin-left: -58px"
  615. class="downloadfile"
  616. >下载附件</a
  617. >
  618. </el-form-item>
  619. </el-form>
  620. </el-form>
  621. </div>
  622. <div slot="footer" class="dialog-footer">
  623. <el-button @click="cancel" size="btn">取消</el-button>
  624. </div>
  625. </el-dialog>
  626. <!-- 数据查看弹出层 -->
  627. <el-dialog
  628. :visible.sync="dialogVisible"
  629. title="统计详情"
  630. append-to-body
  631. id="dialoges"
  632. :close-on-click-modal="false"
  633. >
  634. <div class="zuiDa">
  635. <!-- <div class="shuJuTime">当前数据为 : {{ time }}</div> -->
  636. <div class="jiben">已响应部门:{{ yishenpi }}个</div>
  637. <div class="boxxx">
  638. <div v-for="(item, i) in cg" :key="i" class="greed">
  639. <span class="greedss"> </span><span>{{ item }}</span>
  640. </div>
  641. </div>
  642. <div class="jiben">未响应部门:{{ weishenpi }}个</div>
  643. <div class="boxxx">
  644. <div v-for="(item, i) in sb" :key="i" class="red">
  645. <span class="greeds"> </span><span>{{ item }}</span>
  646. </div>
  647. </div>
  648. </div>
  649. </el-dialog>
  650. </div>
  651. </template>
  652. <script>
  653. import {
  654. listResponses,
  655. getResponses,
  656. delResponses,
  657. addResponses,
  658. updateResponses,
  659. exportResponses,
  660. Exhibition,
  661. } from "@/api/thought/responses";
  662. import { getWeiShu } from "@/api/grassrootsregistration/bdglmeeting";
  663. import { exportBdgShuju } from "@/api/grassrootsregistration/bdgldiary";
  664. export default {
  665. name: "responses",
  666. data() {
  667. return {
  668. // 遮罩层
  669. loading: true,
  670. tiem: null,
  671. // 导出遮罩层
  672. exportLoading: false,
  673. url: process.env.VUE_APP_BASE_API,
  674. // 选中数组
  675. ids: [],
  676. // 非单个禁用
  677. single: true,
  678. // 非多个禁用
  679. multiple: true,
  680. // 显示搜索条件
  681. showSearch: true,
  682. // 总条数
  683. total: 0,
  684. // 月教育计划表格数据
  685. thoughtPlanList: [],
  686. // 弹出层标题
  687. title: "",
  688. // 是否显示弹出层
  689. open: false,
  690. // 查询参数
  691. queryParams: {
  692. pageNum: 1,
  693. pageSize: 10,
  694. planName: null,
  695. planStartTime: null,
  696. planEndTime: null,
  697. planIntroduction: null,
  698. filePath: null,
  699. fileName: null,
  700. createName: null,
  701. createId: null,
  702. planNumber: null,
  703. responseNumber: null,
  704. unitId: null,
  705. state: null,
  706. },
  707. // 表单参数
  708. form: {},
  709. // 表单校验
  710. rules: {},
  711. // 左侧树形
  712. deptOptions: [],
  713. //左侧时间选择
  714. pickerOptions: {
  715. disabledDate(time) {
  716. return time.getTime() > Date.now();
  717. },
  718. },
  719. // 树形配置
  720. defaultProps: {
  721. children: "children",
  722. label: "label",
  723. },
  724. //添加计划条数表格为空
  725. checkShop: [
  726. {
  727. planContent: null,
  728. responseStatus: null,
  729. },
  730. ],
  731. radio: "",
  732. // 查看弹出层的显示与隐藏
  733. open3: false,
  734. rules3: {},
  735. files: [],
  736. // 下载文件
  737. planResponsefus: [],
  738. // 审批弹出层的显示与隐藏
  739. open2: false,
  740. rules2: {
  741. reasons: [
  742. { required: true, message: "请输入驳回原因", trigger: "blur" },
  743. ],
  744. },
  745. // 数据时间的保存
  746. tiems: "",
  747. // 获取成功对象
  748. cg: {},
  749. // 获取失败对象
  750. sb: {},
  751. // 获取登记部门数量
  752. yishenpi: null,
  753. // 获取未登记数量
  754. weishenpi: null,
  755. // 数据查看的弹出层
  756. dialogVisible: false,
  757. // 右边登记数据
  758. registrationData: {},
  759. time: "",
  760. };
  761. },
  762. created() {
  763. this.getList();
  764. this.treeselect();
  765. // 获取数据
  766. this.getShuJu();
  767. this.startTime();
  768. },
  769. methods: {
  770. // 时间
  771. startTime() {
  772. var today = new Date();
  773. var y = today.getFullYear();
  774. var M = today.getMonth() + 1;
  775. var d = today.getDate();
  776. if (M < 10) {
  777. M = "0" + M;
  778. }
  779. if (d < 10) {
  780. d = "0" + d;
  781. }
  782. this.time = y + "-" + M + "-" + d;
  783. },
  784. // 点击数据盒子
  785. dengJI() {
  786. this.dialogVisible = true;
  787. },
  788. // 获取部门数据
  789. getShuJu() {
  790. Exhibition().then((res) => {
  791. this.registrationData = res.data;
  792. this.cg = res.data[0];
  793. this.sb = res.data[1];
  794. this.yishenpi = res.data[2];
  795. this.weishenpi = res.data[3];
  796. this.tiems = res.time;
  797. });
  798. },
  799. // 审批确定提交操作
  800. submitForm1() {
  801. if (this.form.id != null) {
  802. this.form.state = "2";
  803. updateResponses(this.form).then((response) => {
  804. this.$modal.msgSuccess("审批成功");
  805. this.open2 = false;
  806. this.getList();
  807. });
  808. }
  809. },
  810. // 驳回提交操作
  811. submitFormBoHui() {
  812. this.$refs["form2"].validate((valid) => {
  813. if (valid) {
  814. if (this.form.id != null) {
  815. this.form.state = "3";
  816. updateResponses(this.form).then((response) => {
  817. this.$modal.msgSuccess("审批成功");
  818. this.open2 = false;
  819. this.getList();
  820. });
  821. }
  822. }
  823. });
  824. },
  825. // 审批按钮操作
  826. handleUpdate1(row) {
  827. this.reset();
  828. const id = row.id || this.ids;
  829. getResponses(id).then((response) => {
  830. this.form = response.data;
  831. this.form.reasons = null;
  832. this.checkShop = response.data.responseContents;
  833. response.data.planResponsefus.forEach((element) => {
  834. element.name = element.fileName;
  835. element.url = element.filePath;
  836. });
  837. // 附件下载的路径拼接
  838. if (response.data.planResponsefus.length != 0) {
  839. this.planResponsefus = response.data.planResponsefus;
  840. }
  841. this.planResponsefus.forEach((item) => {
  842. item.filePath = process.env.VUE_APP_BASE_API + item.filePath;
  843. });
  844. this.open2 = true;
  845. });
  846. },
  847. // 增加对话框
  848. addForms() {
  849. this.checkShop.push({
  850. planContent: null,
  851. responseStatus: null,
  852. });
  853. },
  854. // 删除对话框
  855. delForms(i) {
  856. this.checkShop.splice(i, 1);
  857. },
  858. /** 查询月教育计划列表 */
  859. getList() {
  860. this.loading = true;
  861. listResponses(this.queryParams).then((response) => {
  862. this.thoughtPlanList = response.rows;
  863. this.total = response.total;
  864. this.loading = false;
  865. });
  866. },
  867. // 取消按钮
  868. cancel() {
  869. this.open3 = false;
  870. this.reset();
  871. },
  872. // 表单重置
  873. reset() {
  874. this.form = {
  875. id: null,
  876. planName: null,
  877. planStartTime: null,
  878. planEndTime: null,
  879. planIntroduction: null,
  880. filePath: null,
  881. fileName: null,
  882. createTime: null,
  883. updateTime: null,
  884. createName: null,
  885. createId: null,
  886. remark: null,
  887. planNumber: null,
  888. responseNumber: null,
  889. unitId: null,
  890. state: null,
  891. };
  892. this.resetForm("form");
  893. },
  894. /** 搜索按钮操作 */
  895. handleQuery() {
  896. this.queryParams.pageNum = 1;
  897. this.getList();
  898. },
  899. /** 重置按钮操作 */
  900. resetQuery() {
  901. this.resetForm("queryForm");
  902. this.handleQuery();
  903. },
  904. // 多选框选中数据
  905. handleSelectionChange(selection) {
  906. this.ids = selection.map((item) => item.id);
  907. this.single = selection.length !== 1;
  908. this.multiple = !selection.length;
  909. },
  910. /** 新增按钮操作 */
  911. handleAdd() {
  912. this.reset();
  913. this.open = true;
  914. this.title = "添加月教育计划";
  915. },
  916. /** 查看按钮操作(修改) */
  917. handleUpdate(row) {
  918. this.reset();
  919. const id = row.id || this.ids;
  920. getResponses(id).then((response) => {
  921. this.form = response.data;
  922. this.checkShop = response.data.responseContents;
  923. response.data.planResponsefus.forEach((element) => {
  924. element.name = element.fileName;
  925. element.url = element.filePath;
  926. });
  927. // 附件下载的路径拼接
  928. if (response.data.planResponsefus.length != 0) {
  929. this.planResponsefus = response.data.planResponsefus;
  930. }
  931. this.planResponsefus.forEach((item) => {
  932. item.filePath = process.env.VUE_APP_BASE_API + item.filePath;
  933. });
  934. this.open3 = true;
  935. // this.title = "修改月教育计划";
  936. });
  937. },
  938. /** 提交按钮 */
  939. submitForm() {
  940. this.$refs["form"].validate((valid) => {
  941. if (valid) {
  942. if (this.form.id != null) {
  943. updateResponses(this.form).then((response) => {
  944. this.$modal.msgSuccess("修改成功");
  945. this.open = false;
  946. this.getList();
  947. });
  948. } else {
  949. addResponses(this.form).then((response) => {
  950. this.$modal.msgSuccess("新增成功");
  951. this.open = false;
  952. this.getList();
  953. });
  954. }
  955. }
  956. });
  957. },
  958. /** 删除按钮操作 */
  959. handleDelete(row) {
  960. const ids = row.id || this.ids;
  961. this.$modal
  962. .confirm("是否确认删除月教育计划的数据项?")
  963. .then(function () {
  964. return delResponses(ids);
  965. })
  966. .then(() => {
  967. this.getList();
  968. this.$modal.msgSuccess("删除成功");
  969. })
  970. .catch(() => {});
  971. },
  972. /** 导出按钮操作 */
  973. handleExport() {
  974. const queryParams = this.queryParams;
  975. this.$modal
  976. .confirm("是否确认导出所有月教育计划数据项?")
  977. .then(() => {
  978. this.exportLoading = true;
  979. return exportResponses(queryParams);
  980. })
  981. .then((response) => {
  982. this.$download.name(response.msg);
  983. this.exportLoading = false;
  984. })
  985. .catch(() => {});
  986. },
  987. // 搜索时间触发
  988. shiJian(data) {
  989. this.queryParams.diaryTime = data;
  990. this.timeDate = data;
  991. this.getList();
  992. this.getShuJu(data);
  993. },
  994. // 获取外面部门树形
  995. treeselect() {
  996. getWeiShu().then((res) => {
  997. this.deptOptions = res.data;
  998. });
  999. },
  1000. //外面树形选择搜索
  1001. handleNodeClick(data) {
  1002. this.queryParams.unitId = data.id;
  1003. this.getList();
  1004. },
  1005. },
  1006. };
  1007. </script>
  1008. <style scoped>
  1009. ::v-deep .el-pagination__sizes .el-input__suffix {
  1010. right: 6px;
  1011. }
  1012. ::v-deep .ql-snow .ql-picker-options .ql-picker-item:focus {
  1013. outline: none !important;
  1014. }
  1015. ::v-deep .ql-snow .ql-picker:focus {
  1016. outline: none !important;
  1017. }
  1018. ::v-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label:focus {
  1019. outline: none !important;
  1020. }
  1021. ::v-deep .ql-toolbar.ql-snow .ql-picker-label {
  1022. border: none !important;
  1023. }
  1024. ::v-deep .ql-formats:focus {
  1025. outline: none !important;
  1026. }
  1027. ::v-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
  1028. border-color: none !important;
  1029. color: black !important;
  1030. }
  1031. /* normal */
  1032. ::v-deep .ql-active {
  1033. outline: none !important;
  1034. }
  1035. /* 输入框 */
  1036. ::v-deep .el-dialog .el-input__inner {
  1037. background-color: #004d86 !important;
  1038. width: 176px;
  1039. color: white;
  1040. margin-right: 20px;
  1041. border: 1px solid white !important;
  1042. }
  1043. ::v-deep .el-input__inner {
  1044. border: 1px solid white !important;
  1045. }
  1046. /* 表格样式 */
  1047. ::v-deep .el-table .el-table__header-wrapper th {
  1048. background-color: #004d86 !important;
  1049. color: white;
  1050. }
  1051. /* 标题弹框 */
  1052. ::v-deep .el-dialog__title {
  1053. color: white;
  1054. /* border-bottom: 1px solid white; */
  1055. }
  1056. /* 标题下划线 */
  1057. ::v-deep .el-dialog__header {
  1058. border-bottom: 1px solid white;
  1059. }
  1060. /* 日历样式 */
  1061. ::v-deep .el-date-editor .el-input__inner {
  1062. height: 36px !important;
  1063. line-height: 36px;
  1064. }
  1065. ::v-deep .datesend .el-form-item__label {
  1066. width: 115px !important;
  1067. }
  1068. /* 会议文本域样式 */
  1069. ::v-deep .el-form-item__content .el-textarea {
  1070. width: 1000px;
  1071. /* height: 80px !important; */
  1072. }
  1073. ::v-deep .el-form-item__content .el-textarea .el-textarea__inner {
  1074. /* width: 1000px; */
  1075. width: 912px;
  1076. min-height: 80px !important;
  1077. }
  1078. ::v-deep .el-dialog__body {
  1079. padding-left: 0px !important;
  1080. padding-right: 0px !important;
  1081. padding-bottom: 0px !important;
  1082. }
  1083. ::v-deep .el-dialog__body {
  1084. margin: 0px 0px 10px 68px;
  1085. padding-top: 20px !important;
  1086. box-sizing: border-box;
  1087. /* padding: 30px 12px 30px 28px; */
  1088. }
  1089. /* 富文本内容 */
  1090. /* ::v-deep .editor{
  1091. width: 1010px;
  1092. color: white;
  1093. } */
  1094. /* 富文本 */
  1095. ::v-deep .ql-snow .ql-fill,
  1096. .ql-snow .ql-stroke.ql-fill {
  1097. fill: #fff !important;
  1098. }
  1099. ::v-deep .ql-snow .ql-stroke {
  1100. stroke: #fff !important;
  1101. }
  1102. ::v-deep .ql-snow .ql-picker {
  1103. color: #fff !important;
  1104. }
  1105. ::v-deep .ql-editor ql-blank {
  1106. color: #fff !important;
  1107. }
  1108. ::v-deep .ql-snow .ql-picker-label {
  1109. position: absolute;
  1110. bottom: 5px;
  1111. }
  1112. ::v-deep .ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
  1113. margin-top: -2px;
  1114. }
  1115. ::v-deep .ql-toolbar.ql-snow {
  1116. display: flex;
  1117. justify-content: space-around;
  1118. }
  1119. /* 富文本删除功能 */
  1120. /* 富文本删除功能 */
  1121. ::v-deep .ql-blockquote {
  1122. display: none !important;
  1123. }
  1124. ::v-deep .ql-strike {
  1125. display: none !important;
  1126. }
  1127. ::v-deep .ql-script {
  1128. display: none !important;
  1129. }
  1130. ::v-deep .ql-code-block {
  1131. display: none !important;
  1132. }
  1133. ::v-deep .ql-direction {
  1134. display: none !important;
  1135. }
  1136. .ql-toolbar.ql-snow .ql-formats {
  1137. margin-right: 7px !important;
  1138. }
  1139. ::v-deep .el-input__inner {
  1140. /* height: 36px !important; */
  1141. color: white;
  1142. background-color: #00365f !important;
  1143. }
  1144. /* 文字多余部分省略 */
  1145. ::v-deep .el-table__cell .cell {
  1146. overflow: hidden;
  1147. text-overflow: ellipsis;
  1148. white-space: nowrap;
  1149. }
  1150. ::v-deep .data .el-date-editor.el-input {
  1151. width: 100%;
  1152. border: none !important;
  1153. }
  1154. ::v-deep .data .el-input__inner {
  1155. width: 100% !important;
  1156. border: none !important;
  1157. }
  1158. ::v-deep .data .el-input--medium .el-input__icon {
  1159. line-height: 36px;
  1160. position: absolute;
  1161. right: -223px;
  1162. top: 2px;
  1163. }
  1164. ::v-deep .data .el-input__inner {
  1165. background-color: transparent !important;
  1166. color: #fff;
  1167. text-align: center;
  1168. margin-top: 2px;
  1169. }
  1170. ::v-deep .data .el-input__suffix {
  1171. position: absolute;
  1172. right: 281px;
  1173. }
  1174. .app-container .box-lfet .data {
  1175. height: 40px;
  1176. background: #003156;
  1177. margin-bottom: 12px;
  1178. color: #fff;
  1179. display: flex;
  1180. font-size: 13px;
  1181. line-height: 25px;
  1182. position: relative;
  1183. }
  1184. .box-lfet .data p {
  1185. position: absolute;
  1186. top: -5px;
  1187. left: 15px;
  1188. }
  1189. .box-lfet .data .a1 {
  1190. width: 128px;
  1191. height: 26px;
  1192. background: rgba(23, 74, 112, 0.4);
  1193. border-radius: 13px;
  1194. position: absolute;
  1195. top: 7px;
  1196. left: 60px;
  1197. }
  1198. ::v-deep .data .el-date-editor.el-input {
  1199. width: 100%;
  1200. border: none;
  1201. }
  1202. ::v-deep .data .el-input__inner {
  1203. width: 100% !important;
  1204. border: none;
  1205. }
  1206. ::v-deep .data .el-input--medium .el-input__icon {
  1207. line-height: 36px;
  1208. position: absolute;
  1209. right: -223px;
  1210. top: 2px;
  1211. }
  1212. ::v-deep .data .el-input__inner {
  1213. background-color: transparent;
  1214. color: #fff;
  1215. text-align: center;
  1216. margin-top: 2px;
  1217. }
  1218. ::v-deep .data .el-input__suffix {
  1219. position: absolute;
  1220. right: 281px;
  1221. }
  1222. /* 头部样式 */
  1223. .dadui {
  1224. height: 40px;
  1225. background: #003156;
  1226. /* border-bottom: 1px solid #718A9D ; */
  1227. background-image: url(../../../images/矩形底部边框.png);
  1228. background-repeat: no-repeat;
  1229. background-position: 0px 39px;
  1230. font-size: 16px;
  1231. color: #1d96ff;
  1232. }
  1233. .dadui img {
  1234. margin: 10px 10px 0px 10px;
  1235. }
  1236. .data p {
  1237. position: absolute;
  1238. top: -5px;
  1239. left: 15px;
  1240. }
  1241. .data .a1 {
  1242. width: 128px;
  1243. height: 26px;
  1244. background: rgba(23, 74, 112, 0.4);
  1245. border-radius: 13px;
  1246. position: absolute;
  1247. top: 7px;
  1248. left: 60px;
  1249. }
  1250. /* 划过效果 */
  1251. ::v-deep .el-tree-node__content:hover {
  1252. /* color: #fff; */
  1253. background-color: #003156;
  1254. background-image: url("../../../assets/images/选中.png");
  1255. background-size: 100% 100%;
  1256. background-repeat: no-repeat;
  1257. }
  1258. /* .app-container {
  1259. display: flex;
  1260. } */
  1261. /* 左侧树状盒子 */
  1262. .app-container .box-lfet {
  1263. width: 15%;
  1264. min-height: 740px;
  1265. /* background: #003156; */
  1266. /* padding: 10px; */
  1267. margin-right: 10px;
  1268. /* border: 1px solid white; */
  1269. }
  1270. /* 右侧内容盒子 */
  1271. .app-container .box-right {
  1272. flex: 1;
  1273. }
  1274. .app-container .box-lfet .data {
  1275. height: 40px;
  1276. background: #003156;
  1277. margin-bottom: 12px;
  1278. color: #fff;
  1279. display: flex;
  1280. font-size: 13px;
  1281. line-height: 25px;
  1282. position: relative;
  1283. }
  1284. .el-tree {
  1285. background: #003156;
  1286. color: #fff;
  1287. margin-right: 2px;
  1288. padding-top: 7px;
  1289. }
  1290. ::v-deep .el-dialog {
  1291. background-color: #004d86 !important;
  1292. }
  1293. ::v-deep .el-input__suffix {
  1294. right: 60px;
  1295. }
  1296. ::v-deep .el-tree-node__content {
  1297. height: 32px;
  1298. }
  1299. ::v-deep
  1300. .el-tree--highlight-current
  1301. .el-tree-node.is-current
  1302. > .el-tree-node__content {
  1303. height: 32px;
  1304. color: #fff !important;
  1305. background-color: #003156;
  1306. background-image: url("../../../assets/images/选中.png");
  1307. background-size: 100% 100%;
  1308. background-repeat: no-repeat;
  1309. }
  1310. ::v-deep .canjiaren .el-input__inner {
  1311. width: 560px;
  1312. }
  1313. /* 计划附件 */
  1314. ::v-deep .el-upload__tip {
  1315. color: white;
  1316. position: absolute;
  1317. top: -5px;
  1318. width: 500px;
  1319. left: 90px;
  1320. color: white;
  1321. }
  1322. ::v-deep .el-link.el-link--default {
  1323. color: white;
  1324. text-indent: 0.5em;
  1325. }
  1326. ::v-deep .el-table__fixed-right {
  1327. height: 100% !important;
  1328. }
  1329. ::v-deep .el-dialog__footer {
  1330. margin-right: 54px;
  1331. }
  1332. ::v-deep th {
  1333. background: #004d86 !important;
  1334. }
  1335. /* 下载按钮 */
  1336. .downloadfile {
  1337. border: 1px solid white;
  1338. display: inline-block;
  1339. width: 100px;
  1340. height: 36px;
  1341. border-radius: 5px;
  1342. line-height: 33px;
  1343. text-align: center;
  1344. }
  1345. /* 卡片样式 */
  1346. .app-container {
  1347. height: calc(100vh - 108px) !important;
  1348. }
  1349. .shuJu {
  1350. height: 16px;
  1351. margin-top: 13px;
  1352. margin-right: 90px;
  1353. float: right;
  1354. /* background-color: red; */
  1355. color: #fff;
  1356. font-size: 14px;
  1357. position: absolute;
  1358. right: 10px;
  1359. }
  1360. .box44::before {
  1361. display: inline-block;
  1362. content: "";
  1363. width: 8px;
  1364. height: 8px;
  1365. /* border-radius: 50%; */
  1366. background-color: #1d96ff;
  1367. margin-left: 26px;
  1368. }
  1369. .box5::before {
  1370. display: inline-block;
  1371. content: "";
  1372. width: 8px;
  1373. height: 8px;
  1374. /* border-radius: 50%; */
  1375. background-color: #67c23a;
  1376. margin-left: 26px;
  1377. }
  1378. .box6::before {
  1379. display: inline-block;
  1380. content: "";
  1381. width: 8px;
  1382. height: 8px;
  1383. /* border-radius: 50%; */
  1384. background-color: #ff4949;
  1385. margin-left: 26px;
  1386. }
  1387. .mb8 {
  1388. height: 40px;
  1389. }
  1390. </style>