memberUpgrade.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. <template>
  2. <div class="form-wrap">
  3. <el-form
  4. class="search-box"
  5. ref="form"
  6. :model="form"
  7. :inline="true"
  8. label-width="140px">
  9. <div class="block-title">
  10. 查询条件
  11. </div>
  12. <el-form-item
  13. label="名称"
  14. prop="keyWords1">
  15. <el-input v-model="form.keyWords1"></el-input>
  16. </el-form-item>
  17. <el-form-item
  18. label="类型"
  19. prop="keyWords2">
  20. <el-select v-model="form.keyWords2">
  21. <el-option
  22. value=""
  23. label="全部"
  24. ></el-option>
  25. <el-option
  26. label="游客"
  27. :value="1"
  28. ></el-option>
  29. <el-option
  30. label="多人卡"
  31. :value="2"
  32. ></el-option>
  33. <el-option
  34. label="居民"
  35. :value="3"
  36. ></el-option>
  37. <el-option
  38. label="管理员"
  39. :value="4"
  40. ></el-option>
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item
  44. label="是否IC卡通关"
  45. prop="keyWords3">
  46. <el-select v-model="form.keyWords3">
  47. <el-option
  48. label="全部"
  49. value=""
  50. ></el-option>
  51. <el-option
  52. label="是"
  53. :value="1"
  54. ></el-option>
  55. <el-option
  56. label="否"
  57. :value="0"
  58. ></el-option>
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item
  62. label="是否身份证通关"
  63. prop="keyWords4">
  64. <el-select v-model="form.keyWords4">
  65. <el-option
  66. label="全部"
  67. value=""
  68. ></el-option>
  69. <el-option
  70. label="是"
  71. :value="1"
  72. ></el-option>
  73. <el-option
  74. label="否"
  75. :value="0"
  76. ></el-option>
  77. </el-select>
  78. </el-form-item>
  79. <el-form-item
  80. label="是否人脸通关"
  81. prop="keyWords5">
  82. <el-select v-model="form.keyWords5">
  83. <el-option
  84. label="全部"
  85. value=""
  86. ></el-option>
  87. <el-option
  88. label="是"
  89. :value="1"
  90. ></el-option>
  91. <el-option
  92. label="否"
  93. :value="0"
  94. ></el-option>
  95. </el-select>
  96. </el-form-item>
  97. <el-form-item
  98. label="是否可售"
  99. prop="keyWords6">
  100. <el-select v-model="form.keyWords6">
  101. <el-option
  102. label="全部"
  103. value=""
  104. ></el-option>
  105. <el-option
  106. label="是"
  107. :value="1"
  108. ></el-option>
  109. <el-option
  110. label="否"
  111. :value="0"
  112. ></el-option>
  113. </el-select>
  114. </el-form-item>
  115. <el-form-item
  116. label="是否指纹通关"
  117. prop="keyWords7">
  118. <el-select v-model="form.keyWords7">
  119. <el-option
  120. label="全部"
  121. value=""
  122. ></el-option>
  123. <el-option
  124. label="是"
  125. :value="1"
  126. ></el-option>
  127. <el-option
  128. label="否"
  129. :value="0"
  130. ></el-option>
  131. </el-select>
  132. </el-form-item>
  133. <div class="btn-wrap">
  134. <el-button
  135. @click="reset">
  136. 重置
  137. </el-button>
  138. <el-button
  139. type="primary"
  140. @click="getMemberList">
  141. 搜索
  142. </el-button>
  143. </div>
  144. </el-form>
  145. <div class="table-box">
  146. <div class="block-title">
  147. 会员类型
  148. </div>
  149. <el-table
  150. border
  151. stripe
  152. v-loading="loading"
  153. :data="tableData">
  154. <el-table-column type="expand">
  155. <template slot-scope="props">
  156. <el-form
  157. inline
  158. class="table-expand">
  159. <el-form-item label="通关方式">
  160. <span>{{ props.row.checkWay }}</span>
  161. </el-form-item>
  162. <el-form-item label="检票类型">
  163. <span>
  164. {{
  165. [
  166. props.row.check_pattern,
  167. props.row.scenic_checkTimes_type,
  168. props.row.valid_days,
  169. props.row.checkLimitTimes
  170. ] | complicatedCheckType
  171. }}
  172. </span>
  173. </el-form-item>
  174. </el-form>
  175. </template>
  176. </el-table-column>
  177. <el-table-column
  178. prop="name"
  179. label="类型名称">
  180. </el-table-column>
  181. <el-table-column
  182. label="会员大类">
  183. <template slot-scope="scope">
  184. {{ scope.row.category | memberCategory }}
  185. </template>
  186. </el-table-column>
  187. <el-table-column
  188. width="300"
  189. prop="scenicText"
  190. label="适用景点">
  191. </el-table-column>
  192. <el-table-column
  193. width="100"
  194. prop="capital"
  195. label="价格">
  196. </el-table-column>
  197. <el-table-column
  198. width="200"
  199. prop="memberUpgrades"
  200. label="可升级会员卡"
  201. >
  202. <template slot-scope="scope">
  203. <el-tag
  204. v-for="(item,index) in scope.row.memberUpgrades"
  205. :key="index"
  206. >
  207. {{ item.upgradeName }}
  208. </el-tag>
  209. </template>
  210. </el-table-column>
  211. <el-table-column
  212. width="180px"
  213. label="可售日期">
  214. <template slot-scope="scope">
  215. {{ scope.row.saleDateStart | formatDate }} 至 {{ scope.row.saleDateEnd | formatDate }}
  216. </template>
  217. </el-table-column>
  218. <el-table-column
  219. width="180px"
  220. label="游玩日期">
  221. <template slot-scope="scope">
  222. {{ scope.row.play_startdate | formatDate }} 至 {{ scope.row.play_enddate | formatDate }}
  223. </template>
  224. </el-table-column>
  225. <el-table-column
  226. width="60px"
  227. label="状态">
  228. <template slot-scope="scope">
  229. <span>{{ scope.row.isSale ? '已激活' : '已禁用' }}</span>
  230. </template>
  231. </el-table-column>
  232. <el-table-column
  233. width="120"
  234. label="操作">
  235. <template slot-scope="scope">
  236. <el-button
  237. type="text"
  238. size="mini"
  239. @click="$refs.dialog.show(scope.row)">
  240. 升级设置
  241. </el-button>
  242. </template>
  243. </el-table-column>
  244. </el-table>
  245. <el-pagination
  246. background
  247. :current-page.sync="form.pageNum"
  248. :page-sizes="[10, 20, 50, 100]"
  249. :page-size="form.pageSize"
  250. @size-change="handleSizeChange"
  251. @current-change="getMemberList()"
  252. layout="total, sizes, prev, pager, next, jumper"
  253. :total="total">
  254. </el-pagination>
  255. </div>
  256. <Dialog
  257. :all-member-type-list="allMemberTypeList"
  258. ref="dialog"
  259. @update="getMemberList"></Dialog>
  260. </div>
  261. </template>
  262. <script>
  263. import { getScenic } from '@/api/ticketType'
  264. import { getMemberType } from '@/api/member'
  265. import moment from 'moment'
  266. import Dialog from './memberUpgrade/Dialog'
  267. export default {
  268. name: 'memberType',
  269. data () {
  270. return {
  271. total: 0,
  272. loading: false,
  273. tableData: [],
  274. dialogType: 'edit',
  275. dialogVisible: false,
  276. dialogEditVisible: false,
  277. currentItem: {},
  278. scenicList: [],
  279. allMemberTypeList: [], // 所以会员类型
  280. form: {
  281. keyWords1: '',
  282. keyWords2: '',
  283. keyWords3: '',
  284. keyWords4: '',
  285. keyWords5: '',
  286. keyWords6: '',
  287. keyWords7: '',
  288. pageNum: 1,
  289. pageSize: 10
  290. }
  291. }
  292. },
  293. async created () {
  294. this.loading = true
  295. await this.getScenicList()
  296. this.getMemberList()
  297. this.getAllMemberList()
  298. },
  299. components: {
  300. Dialog
  301. },
  302. methods: {
  303. openDialog (type, item) {
  304. this.dialogType = type
  305. this.currentItem = item
  306. this.dialogVisible = true
  307. },
  308. // 获取景点列表
  309. getScenicList () {
  310. return getScenic().then(res => {
  311. let treeArr = res?.data.children.map(item => item.data)
  312. this.scenicList = treeArr
  313. })
  314. },
  315. getScenicName (id) {
  316. let scenic = this.scenicList.find(s => s.id === id)
  317. return scenic ? scenic.name : ''
  318. },
  319. handleSizeChange (size) {
  320. this.form.pageSize = size
  321. this.getMemberList()
  322. },
  323. // 获取会员卡类型列表
  324. getMemberList () {
  325. this.loading = true
  326. getMemberType(this.form).then(res => {
  327. this.total = res.total
  328. res.list.forEach(item => {
  329. this.formatRow(item)
  330. })
  331. this.tableData = res.list
  332. }).finally(() => {
  333. this.loading = false
  334. })
  335. },
  336. getAllMemberList () {
  337. getMemberType({
  338. pageNum: 1,
  339. pageSize: 1000,
  340. keyWords6: 1,
  341. keyWords8: 1,
  342. keyWords9: 1 }).then(res => {
  343. this.allMemberTypeList = res.list
  344. }).finally(() => {
  345. })
  346. },
  347. // 格式化表格信息
  348. formatRow (item) {
  349. item.scenicText = item.memberTypeScenic.map(s => {
  350. return this.getScenicName(s.scenic_id)
  351. }).join('、')
  352. let checkWayList = []
  353. if (item.idcard_check) checkWayList.push('身份证')
  354. if (item.face_check) checkWayList.push('人脸识别')
  355. if (item.iccard_check) checkWayList.push('IC卡')
  356. if (item.fingerprint_check) checkWayList.push('指纹')
  357. item.checkWay = checkWayList.join('、')
  358. },
  359. reset () {
  360. this.$refs.form.resetFields()
  361. },
  362. formatTime (time) {
  363. return moment(time).format('YYYY-MM-DD HH:mm:ss')
  364. }
  365. }
  366. }
  367. </script>
  368. <style scoped lang="scss">
  369. .info-form {
  370. display: flex;
  371. flex-wrap: wrap;
  372. .info-form-item {
  373. width: 33%;
  374. display: flex;
  375. align-items: center;
  376. .info-form-label {
  377. flex-shrink: 0;
  378. width: 70px;
  379. padding-right: 12px;
  380. color: #64667B;
  381. }
  382. }
  383. }
  384. </style>