InnerSurvey.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861
  1. <style lang="scss">
  2. .preview {
  3. .el-form-item {
  4. margin-bottom: 15px;
  5. }
  6. label,
  7. p {
  8. line-height: 25px !important;
  9. }
  10. }
  11. .el-cascader {
  12. width: 100%;
  13. }
  14. a {
  15. text-decoration: none;
  16. color: #409eff;
  17. cursor: pointer;
  18. }
  19. // 右边
  20. .item-main {
  21. // margin:34px;
  22. // height:600px;
  23. background: #FFFFFF;
  24. width: 356px;
  25. height: 575px;
  26. overflow: auto;
  27. // border: 1px solid #ddd;
  28. // display: none;
  29. position: relative;
  30. top: 24px;
  31. left: 4px;
  32. // box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
  33. border-radius: 5px;
  34. .el-form.over_y {
  35. max-height: calc(100vh - 340px);
  36. overflow: visible;
  37. }
  38. .tpl_form{
  39. border: none;
  40. }
  41. /deep/.el-form-item__label {
  42. float: none;
  43. }
  44. }
  45. // label样式
  46. .edit_label {
  47. /deep/.el-input__inner {
  48. background: #f5faff;
  49. border: 0px;
  50. padding: 0px;
  51. }
  52. }
  53. /deep/.opicon {
  54. font-weight: bold;
  55. padding: 5px;
  56. color: #3895fe;
  57. }
  58. .tpl_title {
  59. font-size: 18px;
  60. margin: 20px 0;
  61. }
  62. .tpl_form {
  63. margin: 20px;
  64. border: 1px solid #ccc;
  65. border-radius: 20px;
  66. /deep/.el-form-item {
  67. background: none;
  68. }
  69. /deep/.el-form-item__content {
  70. width: 100%;
  71. }
  72. }
  73. .survey_logo {
  74. width: 143px;
  75. position: relative;
  76. top: 15px;
  77. left: 20px;
  78. }
  79. .result_dialog .el-dialog {
  80. width: 40%;
  81. margin-top: 20vh !important;
  82. }
  83. .result-item {
  84. height: 35px;
  85. .label {
  86. font-weight: 600;
  87. }
  88. }
  89. .qrcode_dialog {
  90. .el-dialog {
  91. width: 25%;
  92. }
  93. img {
  94. width: 100%;
  95. }
  96. }
  97. .survey_dialog{
  98. .el-dialog{
  99. // width:25%;
  100. width: 400px;
  101. height: 750px;
  102. margin-top: 20px !important;
  103. background: url("../../assets/survey_bg.png") no-repeat;
  104. background-size:100% 100%;
  105. border-radius: 60px;
  106. }
  107. }
  108. </style>
  109. <template>
  110. <section>
  111. <p><span>信息管理></span>内部问卷</p>
  112. <div class="content">
  113. <div class="filter">
  114. <el-form
  115. size="small"
  116. label-width="70px"
  117. :inline="true"
  118. label-position="left"
  119. >
  120. <el-form-item label="">
  121. <el-input
  122. clearable
  123. placeholder="请输入标题"
  124. v-model="form.name"
  125. @clear="getData"
  126. @keyup.enter.native="search"
  127. ></el-input>
  128. </el-form-item>
  129. <el-form-item>
  130. <el-button type="primary" @click="search">搜索</el-button>
  131. </el-form-item>
  132. <el-form-item style="float: right">
  133. <el-button @click="openDiag" type="primary">新建内部问卷</el-button>
  134. </el-form-item>
  135. </el-form>
  136. </div>
  137. <el-table
  138. class="table"
  139. :data="list"
  140. height="50vh"
  141. border
  142. v-loading="loading"
  143. default-expand-all
  144. row-key="id"
  145. style="width: 100%"
  146. >
  147. <el-table-column prop="name" label="标题"> </el-table-column>
  148. <!-- <el-table-column prop="name" label="附件">
  149. <template slot-scope="scope">
  150. <a :href="scope.row.fileurl" target="_blank"
  151. ><span>{{ scope.row.filename }}</span></a
  152. >
  153. </template>
  154. </el-table-column> -->
  155. <el-table-column prop="cname" label="问卷预览">
  156. <template slot-scope="scope">
  157. <a @click="showSurvey(scope.row)" target="_blank"
  158. ><span>查看问卷</span></a
  159. >
  160. <a v-if="scope.row.template_qrcode" @click="showQrcode(scope.row)"
  161. ><span> | 生成二维码</span></a
  162. >
  163. </template>
  164. </el-table-column>
  165. <el-table-column prop="cname" label="填报统计">
  166. <template slot-scope="scope">
  167. <span v-if="scope.row.receiver_ids"
  168. >共统计:
  169. <a target="_blank" @click="analyseData('total', scope.row.id)"
  170. ><span>{{
  171. scope.row.receiver_ids ? scope.row.receiver_ids.length : 0
  172. }}</span></a
  173. >人<br />
  174. </span>
  175. 已填报:<a
  176. :href="scope.row.fileurl"
  177. target="_blank"
  178. @click="analyseData('finish', scope.row.id)"
  179. ><span>{{
  180. scope.row.finish_ids ? scope.row.finish_ids.length : 0
  181. }}</span></a
  182. >人<br />
  183. <span v-if="scope.row.receiver_ids">
  184. 未填报:<a
  185. :href="scope.row.fileurl"
  186. target="_blank"
  187. @click="analyseData('unfinish', scope.row.id)"
  188. ><span>{{ scope.row.unfinish_ids.length }}</span></a
  189. >人<br
  190. /></span>
  191. </template>
  192. </el-table-column>
  193. <el-table-column prop="cname" label="问卷统计" width="80px">
  194. <template slot-scope="scope">
  195. <a @click="showMessageAnalyse(scope.row)">查看</a>
  196. </template>
  197. </el-table-column>
  198. <el-table-column prop="cname" label="发送者" width="80px">
  199. </el-table-column>
  200. <!-- <el-table-column prop="receiver_names" label="接收者"> -->
  201. <!-- </el-table-column> -->
  202. <el-table-column prop="ctime" label="发送时间" width="180px">
  203. </el-table-column>
  204. <el-table-column prop="zip" width="150" label="操作">
  205. <template slot-scope="scope">
  206. <el-button
  207. :class="scope.row.status == 1 ? 'close' : 'open'"
  208. type="text"
  209. @click="switchStatus(scope.row)"
  210. >{{ scope.row.status == 1 ? "禁用" : "启用" }}</el-button
  211. >
  212. <el-button class="edit" type="text" @click="edit(scope.row)"
  213. >编辑</el-button
  214. >
  215. <el-button
  216. v-if="scope.row.status == 0"
  217. class="del"
  218. @click="del(scope.row.id)"
  219. type="text"
  220. >删除</el-button
  221. >
  222. </template>
  223. </el-table-column>
  224. </el-table>
  225. <Page
  226. ref="pageButton"
  227. :current="form.page"
  228. :page_size="form.page_size"
  229. :total="total"
  230. @pageChange="gopage"
  231. />
  232. </div>
  233. <el-dialog
  234. :title="dialogTitle"
  235. :close-on-click-modal="false"
  236. :visible.sync="dialogVisible"
  237. >
  238. <el-form
  239. size="small"
  240. class="preview"
  241. :inline="false"
  242. label-width="80px"
  243. :model="form1"
  244. ref="form1"
  245. :rules="rules"
  246. >
  247. <el-form-item label="标题" prop="name">
  248. <el-input
  249. v-model="form1.name"
  250. placeholder="请输入标题"
  251. maxlength="50"
  252. show-word-limit
  253. ></el-input>
  254. </el-form-item>
  255. <el-form-item label="接收人" prop="receiver_id">
  256. <el-cascader
  257. v-model="form1.receiver_id"
  258. :options="options"
  259. :props="props"
  260. @change="handleChange"
  261. clearable
  262. >
  263. <template slot-scope="{ node, data }">
  264. <span>{{ data.label }}</span>
  265. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  266. </template>
  267. </el-cascader>
  268. </el-form-item>
  269. <el-form-item label="问卷模板" prop="template_id">
  270. <el-select
  271. placeholder="请选择问卷模板"
  272. v-model="form1.template_id"
  273. :disabled="form1.edit"
  274. clearable
  275. >
  276. <el-option
  277. v-for="(item, index) in templateList"
  278. :key="index"
  279. :label="item.name"
  280. :value="item.id"
  281. ></el-option>
  282. </el-select>
  283. </el-form-item>
  284. <!-- <el-form-item label="附件">
  285. <input @change="upload('fileurl')" id="fileurl" type="file" />
  286. <a :href="form1.fileurl" target="_blank"
  287. ><span>{{ form1.filename }}</span></a
  288. >
  289. </el-form-item> -->
  290. </el-form>
  291. <span slot="footer" class="dialog-footer">
  292. <el-button size="small" type="primary" @click="save">确 定</el-button>
  293. </span>
  294. </el-dialog>
  295. <!-- 问卷调查表单 -->
  296. <el-dialog
  297. close-on-click-modal
  298. :show-close="false"
  299. :title="dialogTitle"
  300. :visible.sync="dialogVisible1"
  301. class="survey_dialog" width="400px"
  302. >
  303. <div class="item-main">
  304. <img src="../../assets/survey_logo.png" alt="" class="survey_logo" />
  305. <h5 align="center" class="tpl_title">{{ title }}</h5>
  306. <el-form ref="form" :model="form2" class="tpl_form over_y">
  307. <el-form-item
  308. v-for="(item, index) in widgetList"
  309. :key="index"
  310. :label="item.label"
  311. >
  312. <el-input
  313. v-if="item.type == 'input'"
  314. v-model="form2[item.label]"
  315. :placeholder="item.placeholder"
  316. ></el-input>
  317. <el-input
  318. v-if="item.type == 'textarea'"
  319. type="textarea"
  320. :rows="4"
  321. v-model="form2[item.label]"
  322. :placeholder="item.placeholder"
  323. ></el-input>
  324. <el-radio-group
  325. v-if="item.type == 'radio'"
  326. v-model="form2[item.label]"
  327. >
  328. <el-radio
  329. :label="iitem.label"
  330. v-for="(iitem, index) in item.items"
  331. :key="index"
  332. >{{ iitem.label }}</el-radio
  333. >
  334. </el-radio-group>
  335. <el-checkbox-group
  336. v-else-if="item.type == 'checkbox'"
  337. v-model="form2[item.label]"
  338. >
  339. <el-checkbox
  340. :label="iitem.label"
  341. v-for="(iitem, index) in item.items"
  342. :key="index"
  343. ></el-checkbox>
  344. </el-checkbox-group>
  345. <el-upload
  346. v-if="item.type == 'image'"
  347. action="/api/admin/uploadfile"
  348. list-type="picture-card"
  349. :data="{ type: item.label }"
  350. :on-success="handleSuccess"
  351. >
  352. <i class="el-icon-plus"></i>
  353. </el-upload>
  354. <el-upload
  355. v-if="item.type == 'file'"
  356. class="upload-demo"
  357. ref="upload"
  358. action="/api/admin/uploadfile"
  359. :data="{ type: item.label }"
  360. :on-success="handleSuccess"
  361. >
  362. <!-- <el-button slot="trigger" size="small" type="primary">选取文件</el-button> -->
  363. <el-button
  364. style="margin-left: 10px"
  365. size="small"
  366. type="primary"
  367. plain
  368. >添加文件</el-button
  369. >
  370. <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
  371. </el-upload>
  372. </el-form-item>
  373. <el-form-item v-if="this.widgetList.length">
  374. <el-button
  375. size="medium"
  376. type="primary"
  377. @click="saveResult"
  378. style="width: 100%"
  379. :disabled="form2.status==0"
  380. >{{this.form2.status==1?"提交":"该问卷已禁用"}}</el-button
  381. >
  382. </el-form-item>
  383. </el-form>
  384. </div>
  385. </el-dialog>
  386. <!-- 数据统计分析 -->
  387. <el-dialog
  388. :title="dialogTitle2"
  389. :close-on-click-modal="false"
  390. :visible.sync="dialogVisible2"
  391. >
  392. <div class="content">
  393. <div class="filter">
  394. <el-form
  395. size="small"
  396. label-width="70px"
  397. :inline="true"
  398. label-position="left"
  399. >
  400. <el-form-item label="">
  401. <el-input
  402. clearable
  403. placeholder="请输入标题"
  404. v-model="form1.name"
  405. @clear="search1"
  406. @keyup.enter.native="search1"
  407. ></el-input>
  408. </el-form-item>
  409. <el-form-item>
  410. <el-button type="primary" @click="search1">搜索</el-button>
  411. </el-form-item>
  412. <el-form-item style="float: right">
  413. <el-button type="primary" @click="downloadExcel"
  414. >导出Excel</el-button
  415. >
  416. </el-form-item>
  417. </el-form>
  418. </div>
  419. <el-table
  420. class="table"
  421. :data="analyseDataList"
  422. height="50vh"
  423. border
  424. v-loading="loading"
  425. default-expand-all
  426. row-key="id"
  427. style="width: 100%"
  428. >
  429. <el-table-column prop="realname" label="姓名"> </el-table-column>
  430. <el-table-column
  431. prop="journal_name"
  432. label="所属期刊"
  433. ></el-table-column>
  434. <el-table-column prop="cname" label="状态">
  435. <template slot-scope="scope">
  436. <span v-if="scope.row.post_status">已填报</span>
  437. <span v-else>未填报</span>
  438. </template>
  439. </el-table-column>
  440. <el-table-column prop="post_time" label="填报时间"> </el-table-column>
  441. <el-table-column prop="zip" width="80" label="操作">
  442. <template slot-scope="scope">
  443. <el-button
  444. class="edit"
  445. type="text"
  446. @click="showPostResult(scope.row)"
  447. >查看</el-button
  448. >
  449. </template>
  450. </el-table-column>
  451. </el-table>
  452. <Page
  453. ref="pageButton"
  454. :current="form.page"
  455. :page_size="form.page_size"
  456. :total="total"
  457. @pageChange="gopage"
  458. />
  459. </div>
  460. </el-dialog>
  461. <!-- 展示填报结果 -->
  462. <el-dialog
  463. :title="dialogTitle3"
  464. :close-on-click-modal="false"
  465. :visible.sync="dialogVisible3"
  466. class="result_dialog"
  467. >
  468. <div class="content">
  469. <div
  470. class="result-item"
  471. v-for="(item, key) in this.postResult"
  472. :key="key"
  473. >
  474. <span class="label">{{ key }}:</span
  475. ><span class="value">{{ item }}</span>
  476. </div>
  477. <div v-if="Object.keys(postResult).length == 0">暂无数据</div>
  478. </div>
  479. </el-dialog>
  480. <!-- 展示二维码 -->
  481. <el-dialog
  482. :title="dialogTitle4"
  483. :close-on-click-modal="false"
  484. :visible.sync="dialogVisible4"
  485. class="qrcode_dialog"
  486. >
  487. <div class="content">
  488. <img :src="qrcodeUrl" alt="" />
  489. </div>
  490. </el-dialog>
  491. </section>
  492. </template>
  493. <script>
  494. import Page from "../../components/Page";
  495. export default {
  496. components: {
  497. Page,
  498. },
  499. data() {
  500. return {
  501. // checked: [],
  502. qrcodeUrl: "",
  503. cur_message_id: null,
  504. cur_post_type: null,
  505. postResult: {},
  506. analyseDataList: [],
  507. title: "",
  508. widgetList: [],
  509. form: { name: "", page: 1, page_size: 20 },
  510. form1: {},
  511. form2: {},
  512. total: 1,
  513. list: [{ name: "2333" }],
  514. loading: false,
  515. input: "",
  516. dialogVisible: false,
  517. dialogVisible1: false,
  518. dialogVisible2: false,
  519. dialogVisible3: false,
  520. dialogVisible4: false,
  521. dialogTitle: "",
  522. dialogTitle2: "",
  523. dialogTitle3: "",
  524. dialogTitle4: "",
  525. defaultProps: {},
  526. data: [],
  527. templateList: [],
  528. userList: [],
  529. checkList: [],
  530. rules: {
  531. name: [{ required: true, message: "请输入标题", trigger: "blur" }],
  532. receiver_id: [
  533. { required: true, message: "请选择接收人", trigger: "change" },
  534. ],
  535. template_id: [
  536. { required: true, message: "请选择模板", trigger: "change" },
  537. ],
  538. },
  539. props: { multiple: true },
  540. options: [
  541. {
  542. value: 1,
  543. label: "东南",
  544. children: [
  545. {
  546. value: 2,
  547. label: "上海",
  548. children: [
  549. { value: 3, label: "普陀" },
  550. { value: 4, label: "黄埔" },
  551. { value: 5, label: "徐汇" },
  552. ],
  553. },
  554. {
  555. value: 7,
  556. label: "江苏",
  557. children: [
  558. { value: 8, label: "南京" },
  559. { value: 9, label: "苏州" },
  560. { value: 10, label: "无锡" },
  561. ],
  562. },
  563. {
  564. value: 12,
  565. label: "浙江",
  566. children: [
  567. { value: 13, label: "杭州" },
  568. { value: 14, label: "宁波" },
  569. { value: 15, label: "嘉兴" },
  570. ],
  571. },
  572. ],
  573. },
  574. {
  575. value: 17,
  576. label: "西北",
  577. children: [
  578. {
  579. value: 18,
  580. label: "陕西",
  581. children: [
  582. { value: 19, label: "西安" },
  583. { value: 20, label: "延安" },
  584. ],
  585. },
  586. {
  587. value: 21,
  588. label: "新疆维吾尔族自治区",
  589. children: [
  590. { value: 22, label: "乌鲁木齐" },
  591. { value: 23, label: "克拉玛依" },
  592. ],
  593. },
  594. ],
  595. },
  596. ],
  597. };
  598. },
  599. methods: {
  600. switchStatus(row) {
  601. if (row.status == 1) {
  602. this.$confirm("确定禁用吗?", "提示", {
  603. type: "warning",
  604. }).then(() => {
  605. this.$api.editMessageStatus({ id: row.id }).then((res) => {
  606. row.status = res.data.data;
  607. });
  608. });
  609. }else{
  610. this.$api.editMessageStatus({ id: row.id }).then((res) => {
  611. row.status = res.data.data;
  612. });
  613. }
  614. },
  615. showQrcode(row) {
  616. this.dialogTitle4 = "生成二维码";
  617. this.dialogVisible4 = true;
  618. this.qrcodeUrl = row.template_qrcode;
  619. },
  620. showMessageAnalyse(row) {
  621. this.$router.push({
  622. path: "/message/innerSurvey/analyse",
  623. query: { id: row.id, type: row.type },
  624. });
  625. },
  626. downloadExcel() {
  627. this.$api
  628. .downloadSurveyResult({
  629. message_id: this.cur_message_id,
  630. type: this.cur_post_type,
  631. })
  632. .then((res) => {
  633. var elink = document.createElement("a");
  634. let blob = new Blob([res.data], {
  635. type: "application/vnd.ms-excel,charset=UTF-8",
  636. });
  637. let objUrl = URL.createObjectURL(blob);
  638. let file_name = decodeURIComponent(
  639. res.headers["content-disposition"].split("=")[1]
  640. );
  641. console.log(file_name);
  642. elink.download = file_name;
  643. elink.style.display = "none";
  644. elink.href = objUrl;
  645. document.body.appendChild(elink);
  646. elink.click();
  647. document.body.removeChild(elink);
  648. this.download_loading = false;
  649. });
  650. },
  651. showPostResult(row) {
  652. this.postResult = row.post_result;
  653. this.dialogTitle3 = "填报结果";
  654. this.dialogVisible3 = true;
  655. },
  656. analyseData(type, message_id) {
  657. this.form1 = {};
  658. let parm = this.form1;
  659. parm.type = type;
  660. parm.message_id = message_id;
  661. this.dialogTitle2 = "统计结果";
  662. this.dialogVisible2 = true;
  663. this.$api.getMessageSurveyAnalyse(parm).then((res) => {
  664. this.analyseDataList = res.data.data.list;
  665. this.cur_message_id = message_id;
  666. this.cur_post_type = type;
  667. });
  668. },
  669. handleSuccess(res, file) {
  670. this.form2[res.data.type] = res.data.url;
  671. },
  672. change(i, label) {
  673. this.form2[label] = i;
  674. },
  675. changeMul(i, label) {
  676. this.form2[label] = i;
  677. },
  678. showSurvey(row) {
  679. let _this = this;
  680. this.title = row.name;
  681. this.message_id = row.id;
  682. this.widgetList = [];
  683. this.form2 = {};
  684. this.form2.status = row.status
  685. this.$api.getMessageInfo({ id: row.id }).then((res) => {
  686. if (res.data.code == 0) {
  687. this.widgetList = res.data.data.widget;
  688. this.widgetList.forEach((i) => {
  689. if (i.type == "checkbox") {
  690. // _this.form2[i.label] = [] ;
  691. if (i.result) {
  692. _this.$set(_this.form2, i.label, i.result);
  693. } else {
  694. _this.$set(_this.form2, i.label, []);
  695. }
  696. } else {
  697. _this.$set(_this.form2, i.label, i.result);
  698. }
  699. });
  700. console.log(this.form2);
  701. // debugger
  702. this.dialogVisible1 = true;
  703. }
  704. });
  705. },
  706. upload(type) {
  707. var file = document.getElementById(type).files;
  708. var data = new FormData();
  709. data.append("file", file[0]);
  710. this.$api.uploadFile(data).then((res) => {
  711. if (res.data.code == 0) {
  712. this.$set(this.form1, type, res.data.data.url);
  713. this.$set(this.form1, "filename", res.data.data.name);
  714. this.$message({ message: "上传成功!", type: "success" });
  715. } else {
  716. this.$message.error(res.data.message);
  717. }
  718. });
  719. },
  720. handleChange(value) {
  721. console.log(value);
  722. },
  723. search() {
  724. let parm = this.form;
  725. this.getData();
  726. },
  727. search1() {
  728. let parm = this.form1;
  729. let type = this.cur_post_type;
  730. let message_id = this.cur_message_id;
  731. parm.type = type;
  732. parm.message_id = message_id;
  733. this.dialogTitle2 = "统计结果";
  734. this.dialogVisible2 = true;
  735. this.$api.getMessageSurveyAnalyse(parm).then((res) => {
  736. this.analyseDataList = res.data.data.list;
  737. this.cur_message_id = message_id;
  738. this.cur_post_type = type;
  739. });
  740. },
  741. openDiag() {
  742. this.form1 = {};
  743. this.dialogVisible = true;
  744. this.dialogTitle = "新建内部问卷";
  745. },
  746. gopage(size) {
  747. if (size) {
  748. this.form.page_size = size;
  749. }
  750. this.form.page = this.$refs.pageButton.page;
  751. this.getData();
  752. },
  753. getData() {
  754. var parm = this.form;
  755. parm.type = 0;
  756. this.loading = true;
  757. this.$api.getAllTemplateList().then((res) => {
  758. this.templateList = res.data.data;
  759. });
  760. this.$api.getAllSysUserList().then((res) => {
  761. this.userList = res.data.data;
  762. });
  763. this.$api.getMessageList(parm).then((res) => {
  764. this.list = res.data.data.list;
  765. this.total = res.data.data.total;
  766. this.loading = false;
  767. });
  768. this.$api.getMessageReceiverList().then((res) => {
  769. this.options = res.data.data;
  770. });
  771. },
  772. del(id) {
  773. this.$confirm("确定删除吗", "提示", {
  774. type: "warning",
  775. }).then(() => {
  776. this.$api.delMessageInfo({ id: id }).then((res) => {
  777. this.$message({
  778. message: "删除成功",
  779. type: "success",
  780. });
  781. this.getData();
  782. });
  783. });
  784. },
  785. edit(row) {
  786. this.$api.getMessageInfo({ id: row.id }).then((res) => {
  787. this.form1 = res.data.data;
  788. let receiver_ids = this.form1.receiver_id;
  789. if (typeof receiver_ids == "string") {
  790. receiver_ids = JSON.parse(receiver_ids);
  791. }
  792. this.form1.receiver_id = receiver_ids;
  793. this.dialogVisible = true;
  794. });
  795. },
  796. saveResult() {
  797. let result = JSON.stringify(this.form2);
  798. this.$api
  799. .saveSurveyResult({
  800. message_id: this.message_id,
  801. result: result,
  802. })
  803. .then((res) => {
  804. if (res.data.code == 0) {
  805. this.$message({
  806. type: "success",
  807. message: "保存成功!",
  808. });
  809. } else {
  810. this.$message.error(res.data.message);
  811. }
  812. this.dialogVisible1 = false;
  813. });
  814. },
  815. save() {
  816. this.loading = true;
  817. this.$refs["form1"].validate((valid) => {
  818. if (valid) {
  819. let parm = this.form1;
  820. let id = this.form1.id;
  821. parm.receiver_id = JSON.stringify(parm.receiver_id);
  822. if (id) {
  823. this.dialogVisible = false;
  824. this.$api.editMessage(parm).then((res) => {
  825. if (res.data.code == 0) {
  826. this.$message({
  827. type: "success",
  828. message: "保存成功!",
  829. });
  830. } else {
  831. this.$message.error("保存失败!");
  832. }
  833. this.getData();
  834. this.loading = false;
  835. });
  836. } else {
  837. this.dialogVisible = false;
  838. this.$api.addMessage(parm).then((res) => {
  839. if (res.data.code == 0) {
  840. this.$message({
  841. type: "success",
  842. message: "保存成功!",
  843. });
  844. } else {
  845. this.$message.error("保存失败!");
  846. }
  847. this.getData();
  848. });
  849. }
  850. }
  851. });
  852. },
  853. },
  854. created() {
  855. this.getData();
  856. },
  857. };
  858. </script>