InnerSurvey.vue 25 KB

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