UpgradeDowngradeRecord.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. <!-- 模板区域 -->
  2. <template>
  3. <div class="">
  4. <!-- 模板内容 -->
  5. <el-tabs v-model="pageRequest.auditStatus" @tab-click="handleClick">
  6. <el-tab-pane :label="`待审核 (${pendingReview})`" name="0"></el-tab-pane>
  7. <el-tab-pane :label="`审核通过(${isApproved})`" name="1"></el-tab-pane>
  8. <el-tab-pane :label="`审核不通过(${isNotApproved})`" name="2"></el-tab-pane>
  9. </el-tabs>
  10. <div class="p-2">
  11. <el-form :model="pageRequest" size="small" label-width="85px">
  12. <el-row :gutter="40">
  13. <el-col :span="8">
  14. <el-form-item label="姓名">
  15. <el-input v-model="pageRequest.name" placeholder="输入姓名查找"></el-input>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="8">
  19. <el-form-item label="手机号">
  20. <el-input v-model="pageRequest.mobile" placeholder="输入手机号查找"></el-input>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="8">
  24. <el-form-item label="工号">
  25. <el-input v-model="pageRequest.userId" placeholder="输入工号查找"></el-input>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="8">
  29. <el-form-item label="类型">
  30. <el-select v-model="pageRequest.type">
  31. <el-option label="全部" value=" "></el-option>
  32. <el-option label="升级" value="0"></el-option>
  33. <el-option label="降级" value="1"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="8">
  38. <el-form-item label="申请时间">
  39. <el-date-picker v-model="pageRequest.applyTime" type="daterange" value-format="yyyy-MM-dd"
  40. range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
  41. </el-date-picker>
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="8">
  45. <el-form-item>
  46. <el-button size="small" type="primary" @click="findPage">查询</el-button>
  47. <el-button size="small" type="default" @click="resetFrom">重置</el-button>
  48. </el-form-item>
  49. </el-col>
  50. </el-row>
  51. </el-form>
  52. <templateTable ref="commonTable" :tableHeights="520" :operationWidth="200" :showOperation="true"
  53. :showBatchDelete="false" :data="Result" :columns="Columns" @findPage="findPage">
  54. <template slot="buttonSlot" slot-scope="{ row }" v-if="pageRequest.auditStatus == '0'">
  55. <el-button v-if="row.type == '0'" type="text" size="small" @click="isOperationPassed(row)">
  56. 通过
  57. </el-button>
  58. <el-button v-if="row.type == '0'" type="text" size="small" @click="denyOperation(row)">
  59. 拒绝
  60. </el-button>
  61. <el-button v-if="row.type == '1'" type="text" size="small" @click="unlockLevel(row)">
  62. 解锁等级
  63. </el-button>
  64. </template>
  65. </templateTable>
  66. </div>
  67. <el-dialog title="驳回原因" :visible.sync="OperationVisible" width="25%">
  68. <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="rejectReason" maxlength="200" show-word-limit>
  69. </el-input>
  70. <span slot="footer" class="dialog-footer">
  71. <el-button size="small" @click="OperationVisible = false">取 消</el-button>
  72. <el-button size="small" type="primary" @click="OperationVisiblesubmit">确 定</el-button>
  73. </span>
  74. </el-dialog>
  75. <el-dialog title="升级审核" :visible.sync="upgradeReviewVisible" width="30%">
  76. <el-form label-position="right" size="small" label-width="180px" :model="upgradeReviewInfo" style="width: 450px;">
  77. <el-form-item label="升级前">
  78. <el-input disabled v-model="upgradeReviewInfo.originalLevel"></el-input>
  79. </el-form-item>
  80. <el-form-item label="升级后">
  81. <el-input disabled v-model="upgradeReviewInfo.afterChange"></el-input>
  82. </el-form-item>
  83. <el-form-item v-if="auditCommissionshow" :label="`升级后${upgradeReviewInfo.originalLevel}佣金比例`">
  84. <el-input v-model="upgradeReviewInfo.auditCommission">
  85. <template slot="append">%</template>
  86. </el-input>
  87. </el-form-item>
  88. </el-form>
  89. <span slot="footer" class="dialog-footer">
  90. <el-button size="small" @click="upgradeReviewVisible = false">取 消</el-button>
  91. <el-button size="small" type="primary" @click="upgradeReviewsubmit">审核通过</el-button>
  92. </span>
  93. </el-dialog>
  94. <el-dialog title="解锁等级" :visible.sync="unlockLevelVisible" width="30%">
  95. <el-form label-position="right" size="small" label-width="100px" :model="unlockLevelInfo" style="width: 450px;">
  96. <el-form-item label="支付金额">
  97. <el-input disabled v-model="unlockLevelInfo.paymentAmount">
  98. <template slot="append">元</template>
  99. </el-input>
  100. </el-form-item>
  101. <el-form-item label="收款凭证">
  102. <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="credentialupload"
  103. :file-list="imgList" :limit="1">
  104. <i slot="default" class="el-icon-plus"></i>
  105. <div slot="file" slot-scope="{file}">
  106. <img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
  107. <span class="el-upload-list__item-actions">
  108. <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
  109. <i class="el-icon-zoom-in"></i>
  110. </span>
  111. <span class="el-upload-list__item-delete" @click="handleRemove(file)">
  112. <i class="el-icon-delete"></i>
  113. </span>
  114. </span>
  115. </div>
  116. </el-upload>
  117. </el-form-item>
  118. </el-form>
  119. <span slot="footer" class="dialog-footer">
  120. <el-button size="small" @click="unlockLevelVisible = false">取 消</el-button>
  121. <el-button size="small" type="primary" @click="confirmUnlock">确定解锁</el-button>
  122. </span>
  123. </el-dialog>
  124. <el-image-viewer v-if="showViewer" :on-close="closeViewer" :z-index="9999" :url-list="[imgList[0].url]" />
  125. </div>
  126. </template>
  127. <!-- 行为区域 -->
  128. <script>
  129. import templateTable from "../components/templateTable.vue";
  130. export default {
  131. components: {
  132. templateTable,
  133. "el-image-viewer": () =>
  134. import("element-ui/packages/image/src/image-viewer"),
  135. },
  136. // 数据存放区域
  137. data() {
  138. return {
  139. showViewer: false,//大图预览开关
  140. imgList: [//默认回显图片
  141. ],
  142. auditCommissionshow:true,
  143. upgradeReviewInfo: {
  144. originalLevel: "",//原等级
  145. afterChange: "",//变更后等级
  146. auditCommission: "",//比例
  147. },//升级审核表单
  148. unlockLevelInfo: {
  149. paymentAmount: "",//支付金额
  150. fileId: '',//图片id
  151. recordId: "",//数据id
  152. },//解锁等级表单
  153. userGradeList: [],//等级列表
  154. id: "",//数据id
  155. rejectReason: "",//驳回原因
  156. OperationVisible: false,//拒绝弹窗
  157. upgradeReviewVisible: false,//升级审核弹窗
  158. unlockLevelVisible: false,//解锁等级弹窗
  159. pendingReview: 0,//待审核条数
  160. isApproved: 0,//已审核条数
  161. isNotApproved: 0,//审核不通过条数
  162. pageRequest: {
  163. //检索信息
  164. pageNum: 1,
  165. pageSize: 20,
  166. name: "",//姓名
  167. mobile: "",//手机号
  168. userId: "",//工号
  169. type: "",//类型
  170. applyTime: [],//申请时间
  171. auditStatus: '0',
  172. },
  173. //表头信息
  174. Columns: [
  175. { prop: "name", label: "姓名", minWidth: 180, },
  176. { prop: "mobile", label: "手机号", minWidth: 160 },
  177. { prop: "userId", label: "工号", minWidth: 120 },
  178. { prop: "deptName", label: "所属机构", minWidth: 160 },
  179. { prop: "type", label: "类型", minWidth: 160, formatter: this.typeFormatter },
  180. { prop: "originalLevel", label: "原等级", minWidth: 160, formatter: this.originalLevelFormatter },
  181. { prop: "afterChange", label: "变更后等级", minWidth: 160, formatter: this.afterChangeFormatter },
  182. { prop: "conditions", label: "升级条件", minWidth: 160, formatter: this.conditionsFormatter },
  183. { prop: "rules", label: "考核规则", minWidth: 160, formatter: this.rulesFormatter },
  184. { prop: "rejectReason", label: "驳回原因", minWidth: 160 },
  185. { prop: "createTime", label: "申请时间", minWidth: 160 },
  186. ],
  187. Result: [],//表格数据
  188. }
  189. },
  190. // 生命周期函数
  191. created() {
  192. this.userGradeQuery();
  193. },
  194. // 方法函数
  195. methods: {
  196. // 解锁等级
  197. confirmUnlock() {
  198. this.$api.retail.confirmUnlocking(this.unlockLevelInfo).then((res) => {
  199. if (res.code == '200') {
  200. this.$message({
  201. type: 'success',
  202. message: res.msg,
  203. });
  204. this.unlockLevelVisible = false;
  205. this.findPage();
  206. } else {
  207. this.$message({
  208. type: 'error',
  209. message: res.msg,
  210. });
  211. }
  212. });
  213. },
  214. // 凭证上传
  215. credentialupload(file) {
  216. const params = new FormData(); // 声明formData数据类型
  217. params.append("multipartFile", file.raw);
  218. params.append("type", "image");
  219. this.$api.letter.uploadFile(params).then((res) => {
  220. if (res.code == '200') {
  221. this.unlockLevelInfo.fileId = res.data.id;
  222. } else {
  223. this.$message({
  224. type: 'error',
  225. message: res.msg,
  226. });
  227. }
  228. });
  229. this.imgList.push({ url: file.url });
  230. },
  231. //删除图片
  232. handleRemove(file) {
  233. this.imgList.map((ele, index) => {
  234. if (ele.uid === file.uid) {
  235. this.imgList.splice(index, 1);
  236. }
  237. return ele;
  238. });
  239. },
  240. //图片预览
  241. handlePictureCardPreview(file) {
  242. this.showViewer = true;
  243. },
  244. // 关闭大图查看器
  245. closeViewer() {
  246. this.showViewer = false;
  247. },
  248. //获取人员等级列表
  249. userGradeQuery() {
  250. this.$api.retail.queryGradeNamerule().then((res) => {
  251. if (res.code == '200') {
  252. this.userGradeList = res.data;
  253. } else {
  254. }
  255. });
  256. },
  257. typeFormatter(row, column) {
  258. let type = row.type;
  259. if (type == '0') {
  260. return '升级';
  261. } else {
  262. return '降级';
  263. }
  264. },
  265. originalLevelFormatter(row, column) {
  266. let originalLevel = row.originalLevel;
  267. let info = this.userGradeList.find(val => val.grade == originalLevel)
  268. return info.gradeName
  269. },
  270. afterChangeFormatter(row, column) {
  271. let afterChange = row.afterChange;
  272. let info = this.userGradeList.find(val => val.grade == afterChange)
  273. return info.gradeName
  274. },
  275. conditionsFormatter(row, column) {
  276. return (
  277. <el-popover placement="bottom" width="200" trigger="click">
  278. <div domPropsInnerHTML={row.conditions}></div>
  279. <span slot="reference" style="cursor: pointer">查看规则</span>
  280. </el-popover>
  281. );
  282. },
  283. rulesFormatter(row, column) {
  284. return (
  285. <el-popover placement="bottom" width="200" trigger="click">
  286. <div domPropsInnerHTML={row.rules}></div>
  287. <span slot="reference" style="cursor: pointer">查看规则</span>
  288. </el-popover>
  289. );
  290. },
  291. //重置表单
  292. resetFrom() {
  293. this.pageRequest = {
  294. pageNum: 1,
  295. pageSize: 20,
  296. name: "",//姓名
  297. mobile: "",//手机号
  298. userId: "",//工号
  299. type: "",//类型
  300. applyTime: [],//申请时间
  301. auditStatus: '0',
  302. upgradeType:'',//升降级标识
  303. }
  304. },
  305. handleClick(tab, event) {
  306. this.pageRequest.auditStatus = tab.name;
  307. this.findPage();
  308. },
  309. //升级审核
  310. isOperationPassed(row) {
  311. console.log(row)
  312. if(row.afterChange==row.originalLevel){
  313. this.auditCommissionshow=false;
  314. }
  315. this.id = row.id;
  316. this.upgradeType=row.upgradeType;
  317. this.upgradeReviewVisible = true;
  318. this.upgradeReviewInfo.originalLevel = this.userGradeList.find(val => val.grade == row.originalLevel).gradeName;
  319. this.upgradeReviewInfo.afterChange = this.userGradeList.find(val => val.grade == row.afterChange).gradeName;
  320. },
  321. //升级审核
  322. upgradeReviewsubmit() {
  323. this.$api.retail[this.upgradeType=='1'?'liftingRecorddowngradeAudit':'liftingRecordaudit']({
  324. id: this.id,
  325. auditStatus: "1",
  326. auditCommission: this.upgradeReviewInfo.auditCommission,
  327. }).then((res) => {
  328. if (res.code == '200') {
  329. this.$message({
  330. type: 'success',
  331. message: res.msg,
  332. });
  333. this.upgradeReviewVisible = false;
  334. this.findPage();
  335. } else {
  336. this.$message({
  337. type: 'error',
  338. message: res.msg,
  339. });
  340. }
  341. });
  342. },
  343. //拒绝操作
  344. denyOperation(row) {
  345. this.OperationVisible = true;
  346. this.id = row.id;
  347. },
  348. //解锁等级
  349. unlockLevel(row) {
  350. this.$api.retail.unlockLevel(row.originalLevel).then((res) => {
  351. if (res.code == '200') {
  352. this.unlockLevelInfo.recordId = row.id;
  353. this.unlockLevelInfo.paymentAmount = res.data;
  354. this.unlockLevelVisible = true;
  355. } else {
  356. this.$message({
  357. type: 'error',
  358. message: res.msg,
  359. });
  360. }
  361. });
  362. },
  363. OperationVisiblesubmit() {
  364. this.$api.retail[this.upgradeType=='1'?'liftingRecorddowngradeAudit':'liftingRecordaudit']({
  365. id: this.id,
  366. auditStatus: "2",
  367. rejectReason: this.rejectReason,
  368. }).then((res) => {
  369. if (res.code == '200') {
  370. this.$message({
  371. type: 'success',
  372. message: res.msg,
  373. });
  374. this.OperationVisible = false;
  375. this.findPage();
  376. } else {
  377. this.$message({
  378. type: 'error',
  379. message: res.msg,
  380. });
  381. }
  382. });
  383. },
  384. findPage(data) {
  385. if (data && data.pageRequest) {
  386. this.pageRequest.pageNum = data.pageRequest.pageNum;
  387. this.pageRequest.pageSize = data.pageRequest.pageSize;
  388. } else {
  389. this.pageRequest.pageNum = 1;
  390. this.pageRequest.pageSize = 20;
  391. }
  392. this.$api.retail
  393. .liftingRecordPage({ ...this.pageRequest })
  394. .then((res) => {
  395. //
  396. this.Result = {
  397. content: res.data.records,
  398. pageNum: res.data.current,
  399. pageSize: res.data.size,
  400. totalSize: res.data.total,
  401. };
  402. res.data.groupCount.map(val => {
  403. switch (val.auditStatus) {
  404. case 0:
  405. this.pendingReview = val.count
  406. break;
  407. case 1:
  408. this.isApproved = val.count
  409. break;
  410. case 2:
  411. this.isNotApproved = val.count
  412. break;
  413. default:
  414. }
  415. return val;
  416. })
  417. });
  418. },
  419. },
  420. // 计算属性
  421. computed: {
  422. }
  423. }
  424. </script>
  425. <!-- 样式区域 -->
  426. <style lang='scss' scoped>
  427. /deep/ .el-form {
  428. .el-input {
  429. width: 100% !important;
  430. }
  431. .el-select {
  432. width: 100% !important;
  433. }
  434. .el-date-editor--daterange {
  435. width: 100% !important;
  436. }
  437. }
  438. .width {
  439. width: 200px;
  440. }
  441. </style>