equityCardManagementDetails.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :visible.sync="open"
  5. width="50%"
  6. append-to-body
  7. :close-on-click-modal="false"
  8. @close="cancel"
  9. >
  10. <div class="form-dialog-box"
  11. v-loading="loading"
  12. :element-loading-text="loadingText"
  13. element-loading-spinner="el-icon-loading"
  14. element-loading-background="rgba(0, 0, 0, 0)">
  15. <div
  16. v-loading="loading"
  17. :element-loading-text="''"
  18. element-loading-spinner="''"
  19. element-loading-background="rgba(0, 0, 0, 0.8)"
  20. >
  21. <el-form :model="form" ref="form" :rules="rules" label-width="150px">
  22. <div class="form-title"><span>基本信息</span></div>
  23. <el-form-item label="卡状态:" prop="cardType">
  24. <dict-tag :options="dict.type.gift_type" :value="form.cardType"/>
  25. </el-form-item>
  26. <el-form-item label="卡号:" prop="cardNo">
  27. <span>{{ form.cardNo }}</span>
  28. </el-form-item>
  29. <el-form-item label="卡面金额:" prop="amount">
  30. <span>{{ form.amount }}</span>
  31. </el-form-item>
  32. <el-form-item label="开始时间:" prop="startTime">
  33. <span>{{ form.startTime }}</span>
  34. </el-form-item>
  35. <el-form-item label="到期时间:" prop="endTime">
  36. <span>{{ form.endTime }}</span>
  37. </el-form-item>
  38. <el-form-item label="核销密码:" prop="checkPassword">
  39. <span>{{ form.checkPassword }}</span>
  40. </el-form-item>
  41. </el-form>
  42. </div>
  43. </div>
  44. <span slot="footer" class="dialog-footer" v-if="formStatus==1">
  45. <el-button @click="cancel">关闭</el-button>
  46. </span>
  47. <!-- 添加或修改对话框 End -->
  48. </el-dialog>
  49. </template>
  50. <script>
  51. import {
  52. getTableDeatilsByIdApi,
  53. addTableApi
  54. } from '@/api/CURD'
  55. export default {
  56. name: "addAndEdit",
  57. dicts: ['gift_type'],
  58. data() {
  59. return {
  60. title: "",
  61. model: "", // EDIT: 编辑模式 ADD : 新增模式 EDITInit : 编辑模式(需要请求详情)
  62. open: false,
  63. loading: false,
  64. loadingText: "拼命加载数据中...",
  65. formStatus: null, // 0/null : 加载中 1 : 获取详情成功 2 : 获取详情失败
  66. configUrl: {
  67. add: '', // 新增地址
  68. details: '/merchant/merchantGiftCard/selectById', // 详情地址
  69. edit: '', // 编辑地址
  70. },
  71. form: {
  72. id: undefined,
  73. ocrPic: []
  74. },
  75. rules: {},
  76. scenicAreaProducts: [],// 景点产品关联
  77. errReasonText: ''
  78. };
  79. },
  80. methods: {
  81. async initData(title , model,row){
  82. this.title = title
  83. this.open = true
  84. this.loadingText = "拼命加载数据中..."
  85. this.loading = true
  86. this.actionUrlLoading = false
  87. this.model = model
  88. this.formStatus = 0
  89. if(model=='EDITInit' || model == 'DEATILSADD') { // 新增
  90. await this.getTableDeatilsFun(row)
  91. }
  92. this.loading = false
  93. this.$nextTick(()=>{
  94. if(this.$refs["form"]) {
  95. this.$refs["form"].clearValidate();
  96. }
  97. })
  98. },
  99. /** 获取详情 */
  100. async getTableDeatilsFun(row) {
  101. const id = row.id
  102. this.loading = true
  103. try {
  104. let res = await getTableDeatilsByIdApi(this.configUrl.details,{id})
  105. if(res.code == 200) {
  106. let obj = {
  107. ...res.data,
  108. ocrPic: res.data.ocrPic?res.data.ocrPic.split(','):[],
  109. errReason_1: res.data.errReason
  110. }
  111. this.errReasonText = ''
  112. this.$set(this,'form',JSON.parse(JSON.stringify(obj)))
  113. this.formStatus = 1
  114. }else {
  115. this.$message.error('获取详情失败!!!');
  116. this.formStatus = 2
  117. this.loading = false
  118. this.open = false;
  119. }
  120. this.loading = false
  121. } catch (error) {
  122. console.error('获取详情失败!!!!',error)
  123. this.formStatus = 2
  124. this.loading = false
  125. this.open = false;
  126. }
  127. },
  128. /**
  129. * 重置
  130. * @date 2023-11-22
  131. * @returns {any}
  132. */
  133. reset() {
  134. if(this.$refs["form"]) {
  135. this.$refs["form"].clearValidate();
  136. }
  137. },
  138. /**
  139. * 关闭弹框
  140. * @date 2023-11-22
  141. * @returns {any}
  142. */
  143. cancel() {
  144. this.reset();
  145. this.open = false;
  146. },
  147. /** 审核操作 */
  148. refundAudit(type){
  149. if(type == 2 && !this.form.errReason) {
  150. this.errReasonText = "请输入驳回原因"
  151. return
  152. }
  153. this.loading = true
  154. addTableApi(
  155. type == 2?'/merchant/memberEquityCard/authReject':'/merchant/memberEquityCard/authPass',{
  156. id: this.form.id,// 退款ID-列表ID
  157. errReason: this.form.errReason,
  158. }).then(response => {
  159. this.$modal.msgSuccess(`提交成功`);
  160. this.loading = false
  161. this.open = false;
  162. this.$emit('refresh')
  163. }).catch(()=>{
  164. this.$message.error("提交失败!!!");
  165. this.loading = false
  166. })
  167. }
  168. },
  169. };
  170. </script>
  171. <style lang="scss" scoped>
  172. .form-dialog-box {
  173. padding: 0 30px;
  174. padding: 0 30px;
  175. min-height: 50vh;
  176. max-height: 65vh;
  177. overflow-y: auto;
  178. >div {
  179. width: 100%;
  180. min-height: 50vh;
  181. }
  182. .form-title {
  183. padding: 0 0 10px 0;
  184. span {
  185. display: flex;
  186. color: rgba(65,80,88,1);
  187. font-size: 16px;
  188. font-family: SourceHanSansSC;
  189. font-weight: 700;
  190. line-height: 23px;
  191. border-left: 4px solid rgb(22, 132, 252);
  192. padding-left: 10px;
  193. }
  194. }
  195. ::v-deep .ql-editor {
  196. height: 400px;
  197. }
  198. .upload-btn {
  199. width: 100px;
  200. height: 100px;
  201. background-color: #fbfdff;
  202. border: dashed 1px #c0ccda;
  203. border-radius: 5px;
  204. i {
  205. font-size: 30px;
  206. margin-top: 20px;
  207. }
  208. &-text {
  209. margin-top: -10px;
  210. }
  211. }
  212. .avatar {
  213. cursor: pointer;
  214. }
  215. }
  216. .el-table{
  217. .upload-btn {
  218. width: 100px;
  219. height: 100px;
  220. background-color: #fbfdff;
  221. border: dashed 1px #c0ccda;
  222. border-radius: 5px;
  223. i {
  224. font-size: 30px;
  225. margin-top: 20px;
  226. }
  227. &-text {
  228. margin-top: -10px;
  229. }
  230. }
  231. .avatar {
  232. cursor: pointer;
  233. }
  234. }
  235. .area-container {
  236. min-height: 400px;
  237. }
  238. ::v-deep .area-wrap-city.el-cascader {
  239. line-height: normal;
  240. .el-input {
  241. cursor: pointer;
  242. width: 100% !important;
  243. height: 28px !important;
  244. .el-input__inner {
  245. display: none !important;
  246. }
  247. span.el-input__suffix {
  248. position: inherit !important;
  249. i.el-input__icon {
  250. line-height: inherit;
  251. margin-left: 5px;
  252. }
  253. }
  254. .el-input__wrapper {
  255. box-shadow: none;
  256. input {
  257. display: none;
  258. }
  259. }
  260. }
  261. .el-cascader__tags {
  262. display: none;
  263. }
  264. }
  265. .area-city-popper {
  266. .el-cascader-panel {
  267. .el-scrollbar.el-cascader-menu {
  268. .el-cascader-menu__wrap.el-scrollbar__wrap {
  269. height: 315px;
  270. }
  271. }
  272. }
  273. }
  274. ::v-deep .avatar-uploader .el-upload {
  275. border: 1px dashed #d9d9d9;
  276. border-radius: 6px;
  277. cursor: pointer;
  278. position: relative;
  279. overflow: hidden;
  280. }
  281. ::v-deep .avatar-uploader .el-upload:hover {
  282. border-color: #409EFF;
  283. }
  284. ::v-deep .avatar-uploader-icon {
  285. font-size: 28px;
  286. color: #8c939d;
  287. width: 100px;
  288. height: 100px;
  289. line-height: 100px;
  290. text-align: center;
  291. }
  292. ::v-deep .avatar {
  293. width: 100px;
  294. height: 100px;
  295. display: block;
  296. }
  297. </style>
  298. <style>
  299. .custom-class-box {
  300. z-index: 999999 !important;
  301. }
  302. </style>