leader-mailbox-list2.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <div>
  3. <!-- 循环体 -->
  4. <!-- 通过ref找到循环体中的当前项 -->
  5. <div
  6. class="consult"
  7. v-for="(item, index) in value"
  8. :key="index"
  9. ref="dialog"
  10. >
  11. <!-- 渲染员工姓名 -->
  12. <div class="consult-item">
  13. <span>
  14. <img src="../../../assets/images/leader-mailbox/renwu.png" alt="" />
  15. </span>
  16. <input type="text" placeholder="姓名" readonly :value="item.name" />
  17. <!-- 这里进行判断是否是已回复还是未回复 -->
  18. <div>
  19. <van-button
  20. type="primary"
  21. disabled
  22. size="mini"
  23. v-if="(status = item.reply_status)"
  24. >已回复</van-button
  25. >
  26. <van-button type="danger" disabled size="mini" v-else
  27. >未回复</van-button
  28. >
  29. </div>
  30. </div>
  31. <!-- 渲染员工留言时间 -->
  32. <div class="consult-item-time">
  33. <span>
  34. <img src="../../../assets/images/leader-mailbox/shijian.png" alt="" />
  35. </span>
  36. <input
  37. type="text"
  38. placeholder="时间"
  39. readonly
  40. :value="item.created_at"
  41. />
  42. </div>
  43. <!-- 渲染员工留言内容 -->
  44. <div class="consult-item-textarea">
  45. <span>
  46. <img src="../../../assets/images/leader-mailbox/neirong.png" alt="" />
  47. </span>
  48. <textarea
  49. name=""
  50. id=""
  51. cols="30"
  52. rows="1"
  53. readonly
  54. :value="item.content"
  55. ></textarea>
  56. </div>
  57. <!-- 渲染领导回复 -->
  58. <div class="consult-item-textarea" v-if="(status1 = item.reply_status)">
  59. <span>
  60. <img src="../../../assets/images/leader-mailbox/huifu.png" alt="" />
  61. </span>
  62. <!-- 渲染领导回复时间 -->
  63. <div>
  64. <input
  65. type="text"
  66. placeholder="暂无回复"
  67. readonly
  68. :value="item.reply_time"
  69. />
  70. <!-- 渲染领导回复内容 -->
  71. <p>{{ item.reply }}</p>
  72. </div>
  73. </div>
  74. <!-- 回复按钮 -->
  75. <!-- 点击回复按钮时进行判断当领导已回复隐藏回复按钮,加载领导回复模块 -->
  76. <!-- 这里用接口中的 reply_status 进行判断当 ==0时表示未回复,此时隐藏领导回复模块 ==1时反之加载,并隐藏回复按钮 -->
  77. <div @click="reply(index, item.id)" v-else class="consult-item-button">
  78. <div class="input-button">
  79. <input type="button" value="回复" />
  80. </div>
  81. </div>
  82. <!-- 弹出框 -->
  83. <!-- 这里需要用vant提供的自定义事件来触发 -->
  84. <div>
  85. <van-dialog
  86. v-model="correlate"
  87. @confirm="confirm(indexlist, indexid)"
  88. show-cancel-button
  89. >
  90. <textarea
  91. name=""
  92. id=""
  93. cols="30"
  94. rows="10"
  95. v-model="textareas"
  96. ></textarea>
  97. </van-dialog>
  98. </div>
  99. </div>
  100. </div>
  101. </template>
  102. <script>
  103. export default {
  104. inject: ["reload"], //无痕刷新
  105. data() {
  106. return {
  107. value: [], //获取到员工姓名和留言组成对象,放入数组中
  108. token: sessionStorage.getItem("mytoken")
  109. ? sessionStorage.getItem("mytoken")
  110. : "", //token值保存在本地,有的话取值,没有为空
  111. show: true, //tabber是否显示
  112. gettoken: "", //从url获取到token值
  113. correlate: false, //弹出层
  114. textareas: "", //弹出层中的多行文本域
  115. indexlist: "", //获取当前循环体中的下标
  116. indexid: "", //获取当前循环体中的id
  117. status: 1, //判断已回复,未回复
  118. status1: 0, //是否显示或隐藏回复按钮和领导回复
  119. };
  120. },
  121. mounted() {
  122. document.body.style.backgroundColor = "#3399ff"; //背景色
  123. // this.gettoken =getAllUrlParams(window.location.href).token;
  124. // this.token = `Bearer ${this.gettoken}`;
  125. this.token = this.$route.query.token; //获取token值
  126. sessionStorage.setItem("mytoken", this.token); //存入token值
  127. this.getleaderBox(); //挂载接口信息
  128. },
  129. methods: {
  130. getleaderBox() {
  131. this.$http.post("/api/workbench/leader_mailbox/list", {}).then((res) => {
  132. this.value = res.data.data.data;
  133. });
  134. },
  135. //回复按钮功能
  136. reply(index, id) {
  137. this.indexlist = index;//获取到当前项的下标
  138. this.indexid = id;//获取到档期项的id
  139. if (this.value[index].reply_status == 1) {
  140. this.$toast("已回复");
  141. } else {
  142. this.correlate = true;
  143. }
  144. },
  145. //弹出框的确认按钮
  146. confirm(list, id) {
  147. console.log(this.value[list].reply_status);
  148. if (this.textareas == "") {
  149. this.$toast("内容不能为空");
  150. } else {
  151. this.$http
  152. .post("/api/workbench/leader_mailbox/reply", {
  153. id: id,
  154. reply: this.textareas,
  155. })
  156. .then((res) => {
  157. // if (this.value[list].reply_status == 1) {
  158. // let _el = this.$refs.dialog[list].children[4];
  159. // if (_el.getAttribute("class") === "active") {
  160. // _el.setAttribute("class", "");
  161. // } else {
  162. // _el.setAttribute("class", "active");
  163. // }
  164. // }
  165. this.reload(); //使用无痕刷新重新渲染页面
  166. });
  167. }
  168. },
  169. },
  170. };
  171. </script>
  172. <style scoped>
  173. .consult {
  174. width: 90%;
  175. margin: 3% auto 7%;
  176. background: #fff;
  177. border-radius: 10px;
  178. }
  179. .consult-item {
  180. display: flex;
  181. justify-content: space-between;
  182. line-height: 34px;
  183. }
  184. .consult-item > span {
  185. display: block;
  186. width: 25px;
  187. margin-left: 5%;
  188. }
  189. .consult-item img {
  190. width: 100%;
  191. padding-top: 23%;
  192. }
  193. .consult-item > input {
  194. border: none;
  195. }
  196. .consult-item > div {
  197. margin-right: 5%;
  198. }
  199. .consult-item-time {
  200. line-height: 36px;
  201. display: flex;
  202. }
  203. .consult-item-time > span {
  204. display: flex;
  205. width: 25px;
  206. margin-left: 5%;
  207. }
  208. .consult-item-time img {
  209. width: 25px;
  210. height: 25px;
  211. padding-top: 23%;
  212. }
  213. .consult-item-time > input {
  214. border: none;
  215. margin-left: 7%;
  216. }
  217. .consult-item-textarea {
  218. display: flex;
  219. }
  220. .consult-item-textarea > span {
  221. display: block;
  222. width: 25px;
  223. margin-left: 5%;
  224. }
  225. .consult-item-textarea > textarea {
  226. border: none;
  227. margin-left: 7%;
  228. margin-top: 2%;
  229. }
  230. .consult-item-textarea img {
  231. width: 100%;
  232. padding-top: 23%;
  233. }
  234. .consult-item-textarea {
  235. display: flex;
  236. }
  237. .consult-item-textarea > div > input {
  238. margin-top: 6%;
  239. margin-left: 8%;
  240. border: none;
  241. }
  242. .consult-item-textarea > div p {
  243. margin-top: 3%;
  244. margin-left: 8%;
  245. margin-bottom: 4%;
  246. }
  247. .van-cell {
  248. border-radius: 10px;
  249. }
  250. .van-cell-group {
  251. border-radius: 10px;
  252. }
  253. .input-button {
  254. width: 85%;
  255. background: #39f;
  256. height: 30px;
  257. text-align: center;
  258. margin: auto;
  259. margin-bottom: 10px;
  260. line-height: 30px;
  261. border-radius: 10px;
  262. margin-top: 5%;
  263. }
  264. .input-button > input {
  265. background: #39f;
  266. border: none;
  267. color: #fff;
  268. }
  269. .active {
  270. visibility: hidden;
  271. }
  272. >>> .van-dialog__content {
  273. text-align: center;
  274. }
  275. >>> .van-dialog__content > textarea {
  276. margin-top: 5%;
  277. resize: none;
  278. }
  279. >>> .van-overlay {
  280. background-color: rgba(52, 52, 52, 0.2);
  281. }
  282. .consult-item-button {
  283. padding-bottom: 1%;
  284. }
  285. </style>