index.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div class="bg-F5">
  3. <div class="container">
  4. <el-breadcrumb class="breadcrumb" separator-class="el-icon-arrow-right">
  5. <el-breadcrumb-item to="/">{{ $t(`route.home`) }}</el-breadcrumb-item>
  6. <el-breadcrumb-item>{{ $t(`route.user`) }}</el-breadcrumb-item>
  7. </el-breadcrumb>
  8. <el-row :gutter="20" class="oHidden">
  9. <el-col :span="6">
  10. <user-info />
  11. </el-col>
  12. <el-col :span="18">
  13. <img class="rightImg" src="@assets/userbg.png" alt="" />
  14. </el-col>
  15. </el-row>
  16. <tab
  17. class="tab"
  18. :titles="$t(`page.views.account.user.index.titles`)"
  19. v-if="currIndex !== null"
  20. :currIndex.sync="currIndex"
  21. />
  22. <el-table
  23. :empty-text="$t('loading')"
  24. class="qyrzgs"
  25. border
  26. v-if="arr[currIndex].items"
  27. :data="arr[currIndex].items"
  28. >
  29. <template v-if="currIndex">
  30. <el-table-column
  31. type="index"
  32. :label="$t('page.views.account.user.index.tableIndex')"
  33. width="50"
  34. />
  35. <el-table-column
  36. prop="purchaseTitle"
  37. :label="$t('page.views.account.user.index.purchaseTitle')"
  38. />
  39. <el-table-column
  40. prop="summaryOfNeeds"
  41. :label="$t('page.views.account.user.index.summaryOfNeeds')"
  42. />
  43. <el-table-column
  44. prop="createTime"
  45. :label="$t('page.views.account.user.index.createTime')"
  46. />
  47. <el-table-column :label="$t('page.views.account.user.index.status')">
  48. <span slot-scope="{ row: { status } }">{{
  49. $t(`page.views.account.user.index.status${status == 0 ? 1 : 2}`)
  50. }}</span>
  51. </el-table-column>
  52. <el-table-column :label="$t('page.views.account.user.index.option')">
  53. <template slot-scope="{ row: { id } }">
  54. <el-button
  55. class="textBtn"
  56. @click="revocation(id)"
  57. type="text"
  58. size="small"
  59. >{{ $t(`page.views.account.user.index.revocation`) }}</el-button
  60. >
  61. <span class="editline"></span>
  62. <router-link class="textBtn" to="/info/add">
  63. {{ $t(`page.views.account.user.index.public`) }}
  64. </router-link>
  65. </template>
  66. </el-table-column>
  67. </template>
  68. <template v-else>
  69. <el-table-column
  70. type="index"
  71. :label="$t('page.views.account.user.index.tableIndex')"
  72. width="50"
  73. />
  74. <el-table-column
  75. prop="companyName"
  76. :label="$t('page.views.account.user.index.companyName')"
  77. width="180"
  78. />
  79. <el-table-column
  80. prop="primaryBusiness"
  81. :label="$t('page.views.account.user.index.primaryBusiness')"
  82. />
  83. <el-table-column
  84. prop="followDate"
  85. :label="$t('page.views.account.user.index.followDate')"
  86. />
  87. <el-table-column :label="$t('page.views.account.user.index.option')">
  88. <template slot-scope="{ row: { companyId } }">
  89. <router-link class="textBtn" :to="`/shop/${companyId}`">
  90. {{ $t(`page.views.account.user.index.inShop`) }}</router-link
  91. >
  92. <span class="editline"></span>
  93. <el-button
  94. class="textBtn"
  95. type="text"
  96. size="small"
  97. @click="cancelGz(companyId)"
  98. >{{ $t(`page.views.account.user.index.cancelGz`) }}</el-button
  99. >
  100. </template>
  101. </el-table-column>
  102. </template>
  103. </el-table>
  104. <load-more
  105. v-for="({ url, params, items }, index) in arr"
  106. :key="`table${index}`"
  107. :url="url"
  108. :params="params"
  109. v-show="currIndex === index"
  110. @getItems="items => setItems(items, index)"
  111. />
  112. </div>
  113. </div>
  114. </template>
  115. <script lang="ts">
  116. import { Component, Vue, Watch, Prop } from "vue-property-decorator";
  117. @Component({ name: "user" })
  118. export default class extends Vue {
  119. private currIndex: number | null = null;
  120. private arr: Array<{
  121. url: string;
  122. params: IAny | null;
  123. items: any[];
  124. }> = "/member/follow/getMemberFollowList,demand/info/getMemberDemandList"
  125. .split(",")
  126. .map(url => ({
  127. url,
  128. params: null,
  129. items: []
  130. }));
  131. created() {
  132. const { index = 0 } = this.$route.query;
  133. this.currIndex = Number(index) | 0;
  134. }
  135. @Watch("currIndex")
  136. currIndexChange() {
  137. if (this.currIndex === null) return;
  138. this.arr[this.currIndex].params = this.arr[this.currIndex].params || {};
  139. }
  140. setItems(items: any[], index: number) {
  141. this.$set(this.arr[index], "items", items.length ? items : null);
  142. }
  143. async cancelGz(companyId: number) {
  144. if (
  145. !(await this.$confirm(
  146. `${this.$i18n.t("message.confirm.cancelGz")}`
  147. ).catch(x => false))
  148. )
  149. return;
  150. const [err] = await this.$post("/member/follow/cancleMemberFollow", {
  151. companyId
  152. });
  153. if (err) return;
  154. this.$message.success(`${this.$i18n.t("message.success.cancelGz")}`);
  155. this.arr[0].params = {};
  156. }
  157. async revocation(id: number) {
  158. if (
  159. !(await this.$confirm(
  160. `${this.$i18n.t("message.confirm.revocation")}`
  161. ).catch(x => false))
  162. )
  163. return;
  164. const [err] = await this.$post("demand/info/cancleMemberDemandInfo", {
  165. id
  166. });
  167. if (err) return;
  168. this.$message.success(`${this.$i18n.t("message.success.revocation")}`);
  169. this.arr[1].params = {};
  170. }
  171. }
  172. </script>
  173. <style scoped lang="scss">
  174. .breadcrumb {
  175. height: 4rem;
  176. line-height: 4rem;
  177. }
  178. .rightImg {
  179. width: 100%;
  180. height: 19rem;
  181. border-radius: 0.4rem;
  182. }
  183. .editline {
  184. display: inline-block;
  185. height: 1rem;
  186. width: 0.1rem;
  187. background: #aaaaaa;
  188. margin: 0 0.6rem;
  189. }
  190. .textBtn {
  191. color: #606266;
  192. }
  193. .pageDiv {
  194. text-align: right;
  195. margin-top: 0.5rem;
  196. padding: 3rem 0;
  197. }
  198. .tab {
  199. margin-bottom: 2rem;
  200. }
  201. </style>
  202. <style lang="scss">
  203. .qyrzgs th {
  204. background: #fd5522;
  205. color: #fff;
  206. padding: 0.6rem 0;
  207. text-align: center;
  208. }
  209. .qyrzgs.el-table td {
  210. padding: 0.2rem 0;
  211. }
  212. .qyrzgs.el-table--border th,
  213. .el-table--border td {
  214. border-right: 1px solid #eae1dc;
  215. border-bottom: 1px solid #eae1dc;
  216. }
  217. .qyrzgs.el-table--border {
  218. border: 0.1rem solid #fd5522;
  219. }
  220. .qyrzgs .cell {
  221. text-align: center;
  222. }
  223. </style>