equityCardManagementDetails.vue 9.2 KB

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