SituationDescIndex.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. <!--
  2. * @Description: 党建管理 => 情况说明管理
  3. * @Author: Rockery
  4. * @Date: 2021-12-10 10:45:58
  5. * @LastEditors: Rockery
  6. * @LastEditTime: 2021-12-29 15:23:58
  7. * @FilePath: \party_construct_web\src\views\PartyBuildingMgr\SituationDesc\SituationDescIndex.vue
  8. * @Copyright: Copyright (c) 2016~2021 Rockery(1113269755@qq.com)
  9. -->
  10. <template>
  11. <div
  12. class="app-container situationdesc"
  13. :class="['ADD','VIEW'].includes(pageType) ? 'desc-page':''"
  14. >
  15. <template v-if="pageType === 'LIST'">
  16. <div class="situationdesc-main">
  17. <el-row :gutter="10">
  18. <el-col :span="24">
  19. <div class="situationdesc-main-title">
  20. <div>
  21. <img
  22. :src="require('@/assets/logo/home-main-title-logo.png')"
  23. @error="imgViewerOnerror"
  24. />
  25. </div>
  26. <div>情况说明管理</div>
  27. </div>
  28. </el-col>
  29. <div v-loading="loading">
  30. <el-col :span="24" class="mt20">
  31. <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
  32. <el-form-item prop="beginTime">
  33. <el-date-picker
  34. v-model="queryParams.beginTime"
  35. type="date"
  36. size="small"
  37. clearable
  38. format="yyyy年MM月dd日"
  39. value-format="yyyy-MM-dd"
  40. style="width: 100%;"
  41. placeholder="请选择开始时间"
  42. ></el-date-picker>
  43. </el-form-item>
  44. <el-form-item prop="endTime">
  45. <el-date-picker
  46. v-model="queryParams.endTime"
  47. type="date"
  48. size="small"
  49. clearable
  50. format="yyyy年MM月dd日"
  51. value-format="yyyy-MM-dd"
  52. style="width: 100%;"
  53. placeholder="请选择结束时间"
  54. ></el-date-picker>
  55. </el-form-item>
  56. <el-form-item prop="name">
  57. <el-input
  58. v-model="queryParams.name"
  59. placeholder="请输入情况说明人姓名"
  60. clearable
  61. size="small"
  62. style="width: 100%;"
  63. @keyup.enter.native="handleQuery"
  64. />
  65. </el-form-item>
  66. <el-form-item>
  67. <el-button
  68. v-hasPermi="['partybuildingmgr:situationdesc:query']"
  69. type="primary"
  70. icon="el-icon-search"
  71. @click="handleQueryClick"
  72. >搜索</el-button>
  73. <el-button
  74. v-hasPermi="['partybuildingmgr:situationdesc:reset']"
  75. icon="el-icon-refresh"
  76. @click="resetQueryClick"
  77. >重置</el-button>
  78. </el-form-item>
  79. <el-form-item class="fr" style="margin-right: 0;">
  80. <el-button
  81. v-hasPermi="['partybuildingmgr:situationdesc:add']"
  82. type="rocpartyprimarybtn"
  83. icon="el-icon-plus"
  84. @click="handleAddClick"
  85. >新增</el-button>
  86. </el-form-item>
  87. </el-form>
  88. </el-col>
  89. <el-col :span="24">
  90. <el-table
  91. :data="list"
  92. stripe
  93. border
  94. :header-cell-style="{'text-align':'center'}"
  95. header-row-class-name="situationdesc-table_header-row"
  96. class="situationdesc-main-table"
  97. style="width: 100%;"
  98. >
  99. <el-table-column
  100. label="情况说明人姓名"
  101. prop="name"
  102. width="180"
  103. :show-overflow-tooltip="true"
  104. />
  105. <el-table-column
  106. label="说明了以下流程节点问题"
  107. prop="conditionPoint"
  108. :show-overflow-tooltip="true"
  109. />
  110. <el-table-column
  111. label="情况说明时间"
  112. align="center"
  113. prop="conditionTime"
  114. width="180"
  115. :show-overflow-tooltip="true"
  116. />
  117. <el-table-column
  118. label="操作"
  119. align="center"
  120. fixed="right"
  121. width="100"
  122. class-name="small-padding fixed-width"
  123. >
  124. <template slot-scope="scope">
  125. <el-button
  126. v-hasPermi="['partybuildingmgr:situationdesc:view']"
  127. size="mini"
  128. type="text"
  129. icon="el-icon-view"
  130. style="color: #909399;"
  131. @click="handleViewClick(scope.row)"
  132. >详情</el-button>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. </el-col>
  137. <el-col :span="24">
  138. <pagination
  139. v-show="total>0"
  140. :total="total"
  141. :page.sync="queryParams.pageNum"
  142. :limit.sync="queryParams.pageSize"
  143. @pagination="initData"
  144. />
  145. </el-col>
  146. </div>
  147. </el-row>
  148. </div>
  149. </template>
  150. <template v-else-if="pageType === 'ADD'">
  151. <div class="situationdesc-addpage">
  152. <el-form
  153. ref="situationDescAddpageFormRef"
  154. :model="addPageFormObj.formModel"
  155. :rules="addPageFormObj.formRules"
  156. label-width="190px"
  157. class="situationdesc-addpage-form"
  158. >
  159. <el-row>
  160. <el-col :span="24">
  161. <div class="situationdesc-addpage-title">
  162. <div>
  163. <img
  164. :src="require('@/assets/logo/home-main-title-logo.png')"
  165. @error="imgViewerOnerror"
  166. />
  167. </div>
  168. <div>新增情况说明</div>
  169. </div>
  170. </el-col>
  171. <el-col :span="24">
  172. <div class="situationdesc-addpage-line"></div>
  173. </el-col>
  174. <el-col :span="24">
  175. <el-form-item label="情况说明时间:" prop="beginTime">
  176. <el-date-picker
  177. v-model="addPageFormObj.formModel.name"
  178. type="date"
  179. clearable
  180. format="yyyy年MM月dd日"
  181. value-format="yyyy-MM-dd"
  182. style="width: 100%;"
  183. placeholder="请选择情况说明时间"
  184. ></el-date-picker>
  185. </el-form-item>
  186. </el-col>
  187. <el-col :span="24">
  188. <el-form-item label="情况说明人:" prop="explainer">
  189. <el-select
  190. v-model="addPageFormObj.formModel.explainer"
  191. clearable
  192. filterable
  193. style="width: 100%;"
  194. placeholder="请选择情况说明人"
  195. >
  196. <el-option
  197. v-for="situationExplainerOption in situationExplainerOptions"
  198. :key="situationExplainerOption.dictValue"
  199. :label="situationExplainerOption.dictLabel"
  200. :value="situationExplainerOption.dictValue"
  201. />
  202. </el-select>
  203. </el-form-item>
  204. </el-col>
  205. <el-col :span="24">
  206. <el-form-item label="情况说明:" prop="conditionFile">
  207. <roc-pdf-file-upload
  208. key="ROCPDFFILEUPLOADSITUATIONDESCCONDITIONFILEKEY"
  209. v-model="addPageFormObj.formModel.conditionFile"
  210. upload-file-title="情况说明"
  211. ></roc-pdf-file-upload>
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="24">
  215. <el-form-item
  216. label="问题类型:"
  217. prop="sort"
  218. class="situationdesc-addpage-form-processnode"
  219. >
  220. <el-radio-group v-model="addPageFormObj.formModel.questionType">
  221. <el-radio label="1">流程节点问题</el-radio>
  222. <el-radio label="0">其他问题</el-radio>
  223. </el-radio-group>
  224. <template v-if="addPageFormObj.formModel.questionType === '0'">
  225. <el-input
  226. type="textarea"
  227. clearable
  228. maxlength="300"
  229. show-word-limit
  230. :autosize="{ minRows: 6}"
  231. placeholder="请输入内容"
  232. v-model="addPageFormObj.formModel.remark"
  233. />
  234. </template>
  235. <template v-else-if="addPageFormObj.formModel.questionType === '1'">
  236. <el-checkbox-group
  237. v-model="addPageFormObj.formModel.checkList"
  238. style="width: 100%;"
  239. >
  240. <el-checkbox label="《入党积极分子、发展对象培养教育考察登记表》" style="width: 100%;">
  241. <div class="processnode-circle">6</div>
  242. <div class="processnode-label">《入党积极分子、发展对象培养教育考察登记表》</div>
  243. </el-checkbox>
  244. <el-checkbox label="支委会拟接收预备党员审查会议记录和上报的预审请示" style="width: 100%;">
  245. <div class="processnode-circle">13</div>
  246. <div class="processnode-label">支委会拟接收预备党员审查会议记录和上报的预审请示</div>
  247. </el-checkbox>
  248. </el-checkbox-group>
  249. </template>
  250. <template v-else>
  251. <div>&nbsp;</div>
  252. </template>
  253. </el-form-item>
  254. </el-col>
  255. <!-- <el-col :span="24">
  256. <el-form-item
  257. label="说明了以下流程节点问题:"
  258. prop="sort"
  259. class="situationdesc-addpage-form-processnode"
  260. ></el-form-item>
  261. </el-col>-->
  262. </el-row>
  263. </el-form>
  264. <div class="pagefooter-btngroup">
  265. <el-button
  266. type="rocpartyprimaryplainbtn"
  267. icon="el-icon-circle-close"
  268. @click="handleAddpageCloseClick"
  269. >取 消</el-button>
  270. <el-button
  271. type="rocpartyprimarybtn"
  272. icon="el-icon-circle-check"
  273. @click="handleAddpageSubmitClick"
  274. >确 定</el-button>
  275. </div>
  276. </div>
  277. </template>
  278. <template v-else-if="pageType === 'VIEW'">
  279. <div class="situationdesc-viewpage">
  280. <el-form
  281. ref="situationDescViewpageFormRef"
  282. :model="viewPageFormObj.formModel"
  283. label-width="190px"
  284. class="situationdesc-viewpage-form"
  285. >
  286. <el-row>
  287. <el-col :span="24">
  288. <div class="situationdesc-viewpage-title">
  289. <div>
  290. <img
  291. :src="require('@/assets/logo/home-main-title-logo.png')"
  292. @error="imgViewerOnerror"
  293. />
  294. </div>
  295. <div>情况说明会详情</div>
  296. </div>
  297. </el-col>
  298. <el-col :span="24">
  299. <div class="situationdesc-viewpage-line"></div>
  300. </el-col>
  301. <el-col :span="24">
  302. <el-form-item label="情况说明时间:" prop="beginTime">
  303. <div>{{ viewPageFormObj.formModel.beginTime }}</div>
  304. </el-form-item>
  305. </el-col>
  306. <el-col :span="24">
  307. <el-form-item label="情况说明人:" prop="explainer">
  308. <div>{{ viewPageFormObj.formModel.explainer }}</div>
  309. </el-form-item>
  310. </el-col>
  311. <el-col :span="24">
  312. <el-form-item label="情况说明:" prop="phone">
  313. <div class="situationdesc-viewpage-form-desc">
  314. <div @click="handleViewPageCheckClick">查看</div>
  315. <div @click="handleViewPageDownloadClick">下载</div>
  316. </div>
  317. </el-form-item>
  318. </el-col>
  319. <el-col :span="24">
  320. <el-form-item
  321. label="说明了以下流程节点问题:"
  322. prop="sort"
  323. class="situationdesc-viewpage-form-processnode"
  324. >
  325. <el-checkbox-group v-model="viewPageFormObj.formModel.checkList">
  326. <el-checkbox label="《入党积极分子、发展对象培养教育考察登记表》" disabled>
  327. <div class="processnode-circle">6</div>
  328. <div class="processnode-label">《入党积极分子、发展对象培养教育考察登记表》</div>
  329. </el-checkbox>
  330. <el-checkbox label="支委会拟接收预备党员审查会议记录和上报的预审请示" disabled>
  331. <div class="processnode-circle">13</div>
  332. <div class="processnode-label">支委会拟接收预备党员审查会议记录和上报的预审请示</div>
  333. </el-checkbox>
  334. </el-checkbox-group>
  335. </el-form-item>
  336. </el-col>
  337. </el-row>
  338. </el-form>
  339. <div class="pagefooter-btngroup">
  340. <el-button
  341. type="rocpartyprimaryplainbtn"
  342. icon="el-icon-circle-close"
  343. @click="handleViewPageCloseClick"
  344. >关 闭</el-button>
  345. </div>
  346. </div>
  347. </template>
  348. <template v-else>
  349. <div>&nbsp;</div>
  350. </template>
  351. </div>
  352. </template>
  353. <script>
  354. import {
  355. listSituationDesc,
  356. viewSituationDesc,
  357. addSituationDesc
  358. } from "@/api/PartyBuildingMgr/SituationDesc";
  359. import {
  360. getFullPartyMemberOptions
  361. } from "@/api/PartyBuildingMgr/FullPartyMember";
  362. export default {
  363. name: "Situationdesc",
  364. components: {
  365. 'roc-pdf-file-upload': () => import('@/components/RocPdfFileUpload')
  366. },
  367. data() {
  368. return {
  369. // 遮罩层
  370. loading: true,
  371. pageType: 'LIST',
  372. // 情况说明人选项列表
  373. situationExplainerOptions: [],
  374. total: 10,
  375. queryParams: {
  376. pageNum: 0,
  377. pageSize: 10
  378. },
  379. list: [
  380. {
  381. name: '张三'
  382. },
  383. {
  384. name: '李四'
  385. }
  386. ],
  387. /** 新增或编辑弹框 */
  388. addPageFormObj: {
  389. formModel: {
  390. checkList: []
  391. },
  392. formRules: {
  393. sort: [{ required: true, message: '排序不能为空!', trigger: ['blur', 'change'] }],
  394. bannerUrl: [{ required: true, message: '封面图片不能为空!', trigger: 'change' }]
  395. }
  396. },
  397. viewPageFormObj: {
  398. formModel: {
  399. checkList: []
  400. }
  401. },
  402. pdfDialogVisible: false
  403. };
  404. },
  405. created() {
  406. this.initData();
  407. },
  408. methods: {
  409. /**
  410. * 初始化数据
  411. */
  412. initData() {
  413. this.getList();
  414. },
  415. /**
  416. * 获取表格数据
  417. */
  418. getList() {
  419. this.loading = true;
  420. listSituationDesc(this.queryParams).then(
  421. response => {
  422. this.list = response.rows || [];
  423. this.total = response.total ?? 0;
  424. this.loading = false;
  425. }
  426. );
  427. },
  428. /**
  429. * 获取情况说明人选项列表
  430. */
  431. async getSituationExplainerOptions() {
  432. await getFullPartyMemberOptions().then(
  433. response => {
  434. this.situationExplainerOptions = response.rows || [];
  435. }
  436. );
  437. },
  438. /**
  439. * 搜索按钮事件
  440. */
  441. handleQueryClick() {
  442. this.initData();
  443. },
  444. /**
  445. * 重置按钮事件
  446. */
  447. resetQueryClick() {
  448. this.resetForm("queryForm");
  449. this.handleQueryClick();
  450. },
  451. /**
  452. * 新增按钮事件
  453. */
  454. async handleAddClick() {
  455. await this.getSituationExplainerOptions();
  456. this.pageType = 'ADD';
  457. },
  458. /**
  459. * 详情按钮事件
  460. */
  461. handleViewClick(row) {
  462. this.pageType = 'VIEW';
  463. },
  464. /**
  465. * 新增页面确定按钮事件
  466. */
  467. handleAddpageSubmitClick() {
  468. this.pageType = 'LIST';
  469. },
  470. /**
  471. * 新增页面取消按钮事件
  472. */
  473. handleAddpageCloseClick() {
  474. this.addPageFormObj.formModel = {};
  475. this.resetForm('situationDescAddpageFormRef');
  476. this.pageType = 'LIST';
  477. },
  478. /**
  479. * 详情页面查看按钮事件
  480. */
  481. handleViewPageCheckClick() {
  482. },
  483. /**
  484. * 详情页面下载按钮事件
  485. */
  486. handleViewPageDownloadClick() {
  487. },
  488. /**
  489. * 详情页面关闭按钮事件
  490. */
  491. handleViewPageCloseClick() {
  492. this.pageType = 'LIST';
  493. }
  494. }
  495. };
  496. </script>
  497. <style lang="scss" scoped>
  498. .situationdesc {
  499. .situationdesc-main {
  500. padding: 20px 20px 72px;
  501. min-height: 750px;
  502. background: url("../../../assets/images/home-head-img.png"), #ffffff;
  503. background-size: 67px 67px, cover;
  504. background-position: right 20px bottom 5px, center;
  505. background-repeat: no-repeat, no-repeat;
  506. border-radius: 10px;
  507. &-title {
  508. display: flex;
  509. align-items: center;
  510. div {
  511. &:first-child {
  512. height: 37px;
  513. line-height: 37px;
  514. }
  515. &:last-child {
  516. margin-left: 15px;
  517. height: 37px;
  518. font-size: 26px;
  519. font-weight: 400;
  520. color: #4f4f4f;
  521. line-height: 37px;
  522. letter-spacing: 1px;
  523. }
  524. img {
  525. width: 34px;
  526. height: 34px;
  527. }
  528. }
  529. }
  530. &-tabs.el-tabs {
  531. margin-top: 20px;
  532. ::v-deep {
  533. .el-tabs__item {
  534. font-size: 18px;
  535. font-weight: 500;
  536. color: #4f4f4f;
  537. opacity: 0.9;
  538. }
  539. .el-tabs__active-bar {
  540. background-color: #de0010;
  541. }
  542. .el-tabs__item.is-active {
  543. color: #de0010;
  544. background: #f9e9ea;
  545. }
  546. }
  547. }
  548. &-table {
  549. ::v-deep {
  550. .situationdesc-table_header-row th.el-table__cell {
  551. background-color: #e5d4b4;
  552. }
  553. .el-table__row {
  554. background-color: #ffffff;
  555. }
  556. .el-table__row.el-table__row--striped {
  557. background-color: #f0f0f0;
  558. }
  559. }
  560. }
  561. }
  562. &-addpage {
  563. width: 100%;
  564. &-title {
  565. display: flex;
  566. align-items: center;
  567. margin-bottom: 5px;
  568. div {
  569. &:first-child {
  570. height: 37px;
  571. line-height: 37px;
  572. }
  573. &:last-child {
  574. margin-left: 15px;
  575. height: 37px;
  576. font-size: 26px;
  577. font-weight: 400;
  578. color: #4f4f4f;
  579. line-height: 37px;
  580. letter-spacing: 1px;
  581. }
  582. img {
  583. width: 34px;
  584. height: 34px;
  585. }
  586. }
  587. }
  588. &-line {
  589. width: 100%;
  590. height: 1px;
  591. background: #d8dce5;
  592. margin-bottom: 15px;
  593. }
  594. &-form {
  595. &-processnode {
  596. ::v-deep {
  597. .el-checkbox {
  598. display: flex;
  599. align-items: center;
  600. margin-bottom: 20px;
  601. .el-checkbox__input {
  602. display: flex;
  603. align-items: center;
  604. justify-content: center;
  605. height: 24px;
  606. line-height: 24px;
  607. }
  608. .el-checkbox__label {
  609. display: flex;
  610. align-items: center;
  611. }
  612. }
  613. }
  614. .processnode-circle {
  615. display: flex;
  616. align-items: center;
  617. justify-content: center;
  618. width: 24px;
  619. height: 24px;
  620. font-size: 14px;
  621. color: #323232;
  622. background: #ffffff;
  623. border: 1px solid #323232;
  624. border-radius: 50%;
  625. line-height: 24px;
  626. opacity: 0.9;
  627. }
  628. .processnode-label {
  629. display: flex;
  630. align-items: center;
  631. margin-left: 5px;
  632. height: 24px;
  633. font-size: 16px;
  634. font-weight: 400;
  635. color: #333333;
  636. line-height: 20px;
  637. opacity: 0.9;
  638. }
  639. }
  640. }
  641. }
  642. &-viewpage {
  643. width: 100%;
  644. &-title {
  645. display: flex;
  646. align-items: center;
  647. margin-bottom: 5px;
  648. div {
  649. &:first-child {
  650. height: 37px;
  651. line-height: 37px;
  652. }
  653. &:last-child {
  654. margin-left: 15px;
  655. height: 37px;
  656. font-size: 26px;
  657. font-weight: 400;
  658. color: #4f4f4f;
  659. line-height: 37px;
  660. letter-spacing: 1px;
  661. }
  662. img {
  663. width: 34px;
  664. height: 34px;
  665. }
  666. }
  667. }
  668. &-line {
  669. width: 100%;
  670. height: 1px;
  671. background: #d8dce5;
  672. margin-bottom: 15px;
  673. }
  674. &-form {
  675. &-desc {
  676. display: flex;
  677. align-items: center;
  678. width: 100%;
  679. height: 36px;
  680. line-height: 36px;
  681. div {
  682. display: flex;
  683. align-items: center;
  684. justify-content: center;
  685. height: 36px;
  686. font-weight: 400;
  687. font-style: normal;
  688. font-size: 18px;
  689. color: rgba(24, 144, 255, 0.996);
  690. line-height: 36px;
  691. cursor: pointer;
  692. &:last-child {
  693. margin-left: 20px;
  694. }
  695. &:hover {
  696. text-decoration: underline;
  697. }
  698. }
  699. }
  700. &-processnode {
  701. ::v-deep {
  702. .el-checkbox {
  703. display: flex;
  704. align-items: center;
  705. .el-checkbox__input {
  706. display: flex;
  707. align-items: center;
  708. justify-content: center;
  709. height: 36px;
  710. line-height: 36px;
  711. }
  712. .el-checkbox__label {
  713. display: flex;
  714. align-items: center;
  715. }
  716. &.is-disabled {
  717. cursor: not-allowed;
  718. }
  719. }
  720. }
  721. .processnode-circle {
  722. display: flex;
  723. align-items: center;
  724. justify-content: center;
  725. width: 24px;
  726. height: 24px;
  727. font-size: 14px;
  728. color: #323232;
  729. background: #ffffff;
  730. border: 1px solid #323232;
  731. border-radius: 50%;
  732. line-height: 36px;
  733. opacity: 0.9;
  734. }
  735. .processnode-label {
  736. display: flex;
  737. align-items: center;
  738. margin-left: 5px;
  739. height: 36px;
  740. font-size: 16px;
  741. font-weight: 400;
  742. color: #333333;
  743. line-height: 36px;
  744. opacity: 0.9;
  745. }
  746. }
  747. }
  748. }
  749. }
  750. </style>