EarnPoints.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. <template>
  2. <div class="right-wrap">
  3. <div class="myTabs" style="background: #fff;min-height: 500px;">
  4. <el-tabs style="padding: 0 20px 40px 20px;" v-model="activeName" @tab-click="handleClick">
  5. <el-tab-pane label="证书列表" name="first">
  6. <el-button size="small" type="primary" @click="dialogVisible = true">上传证书</el-button>
  7. <el-table size="small" :data="dataList" border style="margin-top: 20px;width: 960px">
  8. <el-table-column align="center" type="index" width="50" label="序号"></el-table-column>
  9. <el-table-column align="center" min-width="200" label="附件">
  10. <template slot-scope="props">
  11. <div v-for="(item, index) in props.row.files" :key="index">
  12. <a style="color: #1e80ff;" target="_blank" :href="item.url">{{ item.oldName }}</a>
  13. </div>
  14. </template>
  15. </el-table-column>
  16. <el-table-column min-width="100" align="center" prop="typeName" label="证书大类"></el-table-column>
  17. <el-table-column align="center" prop="categoryName" min-width="100" label="证书类型"></el-table-column>
  18. <el-table-column align="center" prop="title" min-width="100" label="证书名称"></el-table-column>
  19. <el-table-column align="center" prop="integral" min-width="100" label="积分"></el-table-column>
  20. <el-table-column min-width="60" align="center" prop="statusName" label="状态"></el-table-column>
  21. <el-table-column min-width="150" align="center" prop="createTime" label="上传时间"></el-table-column>
  22. <el-table-column min-width="80" align="center" label="备注">
  23. <template slot-scope="props">
  24. <el-popover width="200" trigger="hover" :content="props.row.content">
  25. <div slot="reference" class="text-overflow">{{ props.row.content }}</div>
  26. </el-popover>
  27. </template>
  28. </el-table-column>
  29. </el-table>
  30. <!-- 分页 -->
  31. <div class="myPage">
  32. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  33. :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="10"
  34. layout="total, sizes, prev, pager, next, jumper" :total="total">
  35. </el-pagination>
  36. </div>
  37. </el-tab-pane>
  38. <el-tab-pane label="表彰列表" name="third">
  39. <el-button size="small" type="primary" @click="dialogVisibleCite = true">上传表彰</el-button>
  40. <el-table size="small" :data="dataListCite" border style="margin-top: 20px;width: 960px">
  41. <el-table-column align="center" type="index" width="50" label="序号"></el-table-column>
  42. <el-table-column align="center" min-width="200" label="附件">
  43. <template slot-scope="props">
  44. <div v-for="(item, index) in props.row.files" :key="index">
  45. <a style="color: #1e80ff;" target="_blank" :href="item.url">{{ item.oldName }}</a>
  46. </div>
  47. </template>
  48. </el-table-column>
  49. <el-table-column align="center" prop="typeName" min-width="80" label="表彰类型"></el-table-column>
  50. <el-table-column align="center" min-width="100" label="表彰人员">
  51. <template slot-scope="props">
  52. <el-popover trigger="hover">
  53. <el-table :data="props.row.groupUsers" border size="mini">
  54. <el-table-column min-width="200" align="center" prop="deptName" label="部门"></el-table-column>
  55. <el-table-column min-width="100" align="center" prop="userName" label="姓名"></el-table-column>
  56. <el-table-column min-width="100" align="center" prop="employeNo" label="员工号"></el-table-column>
  57. </el-table>
  58. <span style="color: #1e80ff;cursor: pointer;" slot="reference">
  59. {{ props.row.userName }}
  60. </span>
  61. </el-popover>
  62. </template>
  63. </el-table-column>
  64. <el-table-column align="center" min-width="100" label="客户名称">
  65. <template slot-scope="props">
  66. <el-popover width="200" trigger="hover" :content="props.row.customerName">
  67. <div slot="reference" class="text-overflow">{{ props.row.customerName }}</div>
  68. </el-popover>
  69. </template>
  70. </el-table-column>
  71. <el-table-column align="center" min-width="100" label="表彰名称">
  72. <template slot-scope="props">
  73. <el-popover width="200" trigger="hover" :content="props.row.title">
  74. <div slot="reference" class="text-overflow">{{ props.row.title }}</div>
  75. </el-popover>
  76. </template>
  77. </el-table-column>
  78. <el-table-column min-width="100" align="center" label="表彰描述">
  79. <template slot-scope="props">
  80. <el-popover width="200" trigger="hover" :content="props.row.content">
  81. <div slot="reference" class="text-overflow">{{ props.row.content }}</div>
  82. </el-popover>
  83. </template>
  84. </el-table-column>
  85. <el-table-column min-width="100" align="center" label="状态">
  86. <template slot-scope="props">
  87. <el-popover trigger="hover">
  88. <el-table :data="props.row.logs" border size="mini">
  89. <el-table-column min-width="80" align="center" prop="auditor" label="处理人"></el-table-column>
  90. <el-table-column min-width="160" align="center" prop="comment" label="处理结果"></el-table-column>
  91. <!-- <el-table-column min-width="120" align="center" prop="statusName" label="状态"></el-table-column> -->
  92. <el-table-column min-width="180" align="center" prop="createTime" label="处理时间"></el-table-column>
  93. </el-table>
  94. <span style="color: #1e80ff;cursor: pointer;" slot="reference">{{ props.row.statusName }}</span>
  95. </el-popover>
  96. </template>
  97. </el-table-column>
  98. <el-table-column min-width="120" align="center" prop="createTime" label="上传时间"></el-table-column>
  99. </el-table>
  100. <!-- 分页 -->
  101. <div class="myPage">
  102. <el-pagination @size-change="handleSizeChangeCite" @current-change="handleCurrentChangeCite"
  103. :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="10"
  104. layout="total, sizes, prev, pager, next, jumper" :total="totalCite">
  105. </el-pagination>
  106. </div>
  107. </el-tab-pane>
  108. <el-tab-pane label="积分获取规则" name="second">
  109. <el-empty v-if="!integralRules" :image-size="200"></el-empty>
  110. <div v-else v-html="integralRules"></div>
  111. </el-tab-pane>
  112. </el-tabs>
  113. </div>
  114. <el-dialog title="上传证书" :visible.sync="dialogVisible" width="40%">
  115. <el-form :rules="rules" ref="dataForm" :model="dataForm" label-width="100px">
  116. <el-form-item label="证书类别:" prop="type">
  117. <el-cascader clearable size="small" style="width: 95%;" v-model="dataForm.type" :options="typeList"
  118. :props="{ value: 'id', label: 'typeName', children: 'children' }" @change="handleChange"></el-cascader>
  119. </el-form-item>
  120. <el-form-item label="证书名称:" prop="title">
  121. <el-input clearable style="width: 95%;" size="small" v-model="dataForm.title"></el-input>
  122. </el-form-item>
  123. <el-form-item label="证书附件:" prop="fileIds">
  124. <el-upload :action="fileUrl" :file-list="dataForm.files" :on-success="handleAvatarSuccess"
  125. :before-upload="beforeUploadFile" :on-remove="handleRemove">
  126. <el-button size="small" type="primary">点击上传</el-button>
  127. </el-upload>
  128. </el-form-item>
  129. </el-form>
  130. <span slot="footer" class="dialog-footer">
  131. <el-button size="small" type="primary" @click="submitForm">确 定</el-button>
  132. </span>
  133. </el-dialog>
  134. <el-dialog title="上传表彰" :visible.sync="dialogVisibleCite" width="40%">
  135. <el-form :rules="rulesCite" ref="dataFormCite" :model="dataFormCite" label-width="100px">
  136. <el-form-item label="表彰类型:" prop="type">
  137. <el-select clearable size="small" style="width: 95%;" v-model="dataFormCite.type" placeholder="请选择表彰类型">
  138. <el-option v-for="item in typeListCite" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
  139. </el-option>
  140. </el-select>
  141. </el-form-item>
  142. <el-form-item v-if="dataFormCite.type == '1'" label="集体人员:" prop="groupIds">
  143. <el-select size="small" v-model="dataFormCite.groupIds" multiple filterable placeholder="请选择"
  144. style="width: 95%;">
  145. <el-option :key="item.loginId" v-for="item in recipientsList"
  146. :label="item.deptName + '_' + item.userName + '_' + item.employeNo" :value="item.loginId">
  147. </el-option>
  148. </el-select>
  149. </el-form-item>
  150. <el-form-item label="客户名称:" prop="customerName">
  151. <el-input clearable style="width: 95%;" size="small" v-model="dataFormCite.customerName"></el-input>
  152. </el-form-item>
  153. <el-form-item label="表彰名称:" prop="title">
  154. <el-input clearable style="width: 95%;" size="small" v-model="dataFormCite.title"></el-input>
  155. </el-form-item>
  156. <el-form-item label="表彰描述:" prop="content">
  157. <el-input type="textarea" :rows="5" maxlength="500" show-word-limit style="width: 95%;" size="small"
  158. v-model="dataFormCite.content"></el-input>
  159. </el-form-item>
  160. <el-form-item label="表彰附件:" prop="fileIds">
  161. <el-upload :action="fileUrl" :file-list="dataFormCite.files" :on-success="handleAvatarSuccessCite"
  162. :before-upload="beforeUploadFileCite" :on-remove="handleRemoveCite">
  163. <el-button size="small" type="primary">点击上传</el-button>
  164. </el-upload>
  165. </el-form-item>
  166. </el-form>
  167. <span slot="footer" class="dialog-footer">
  168. <el-button size="small" type="primary" @click="submitFormCite">确 定</el-button>
  169. </span>
  170. </el-dialog>
  171. </div>
  172. </template>
  173. <script scoped>
  174. import { certificatePage, certificateUpload, notice, certificatType, dictList, allUserList, citeList, uploadCite } from "@/api/allApi";
  175. import { handleTree } from '@/utils/index'
  176. export default {
  177. data() {
  178. return {
  179. integralRules: '',
  180. typeList: [],
  181. activeName: 'first',
  182. fileUrl: this.baseUrl,
  183. dataList: [],
  184. dialogVisible: false,
  185. rules: {
  186. type: [{ required: true, message: "请选择证书类别", trigger: "blur" }],
  187. title: [{ required: true, message: "请填写证书名称", trigger: "blur" }],
  188. fileIds: [{ required: true, message: "请上传附件", trigger: "blur" }],
  189. },
  190. total: 0,
  191. listQuery: {
  192. page: 1,
  193. limit: 10,
  194. },
  195. dataForm: {
  196. type: [],
  197. title: '',
  198. fileIds: '',
  199. files: [],
  200. },
  201. typeListCite: [],
  202. recipientsList: [],
  203. dataListCite: [],
  204. dialogVisibleCite: false,
  205. rulesCite: {
  206. type: [{ required: true, message: "请选择表彰类型", trigger: "blur" }],
  207. groupIds: [{ required: true, message: "请选择集体人员", trigger: "blur" }],
  208. customerName: [{ required: true, message: "请填写客户名称", trigger: "blur" }],
  209. title: [{ required: true, message: "请填写表彰名称", trigger: "blur" }],
  210. fileIds: [{ required: true, message: "请上传附件", trigger: "blur" }],
  211. content: [{ required: true, message: '请填写表彰描述', trigger: 'blur' }],
  212. },
  213. totalCite: 0,
  214. listQueryCite: {
  215. page: 1,
  216. limit: 10,
  217. },
  218. dataFormCite: {
  219. type: '',
  220. groupIds: [],
  221. customerName: '',
  222. title: '',
  223. fileIds: '',
  224. files: [],
  225. content: ''
  226. }
  227. };
  228. },
  229. created() {
  230. this.getTypeListCite();
  231. this.getAllUserList();
  232. this.getDataListCite();
  233. this.getTypeList();
  234. this.getDataList();
  235. this.getIntegralNotice();
  236. },
  237. methods: {
  238. getTypeList() {
  239. certificatType().then(response => {
  240. this.typeList = handleTree(response.data.data);
  241. console.log(this.typeList);
  242. })
  243. },
  244. handleClick(tab, event) {
  245. console.log(tab.name, event);
  246. },
  247. getIntegralNotice() {
  248. notice({ noticeType: 'certificatNotice' }).then(response => {
  249. this.integralRules = response.data.data.content;
  250. })
  251. },
  252. handleChange(value) {
  253. console.log(value);
  254. },
  255. handleRemove(file, fileList) {
  256. console.log(file, fileList);
  257. let fileIds = [];
  258. for (let i in fileList) {
  259. let id = fileList[i].response.data.id;
  260. fileIds.push(id);
  261. }
  262. this.dataForm.fileIds = fileIds.join(",");
  263. },
  264. beforeUploadFile(file) {
  265. console.log(file);
  266. const size = file.size / 1024 / 1024;
  267. console.log(size);
  268. if (size > 10) {
  269. this.$message.error("文件大小不能超过10MB!");
  270. return false;
  271. }
  272. },
  273. handleAvatarSuccess(res, file, fileList) {
  274. console.log(file, fileList);
  275. console.log("------", "==========");
  276. console.log("res = ", res);
  277. let fileIds = [];
  278. for (let i in fileList) {
  279. let response = fileList[i].response;
  280. if (response.errno && response.errno != "0") {
  281. this.$message.error("该文件上传失败,已被移除,请重新上传!");
  282. // 上传失败移除该 file 对象
  283. fileList.splice(i, 1);
  284. } else {
  285. let id = fileList[i].response.data.id;
  286. fileIds.push(id);
  287. }
  288. }
  289. this.dataForm.fileIds = fileIds.join(",");
  290. },
  291. resetForm() {
  292. this.$refs['dataForm'].resetFields();
  293. },
  294. submitForm() {
  295. this.$refs['dataForm'].validate((valid) => {
  296. if (valid) {
  297. certificateUpload(this.dataForm)
  298. .then((response) => {
  299. this.dialogVisible = false;
  300. this.$notify({
  301. title: "成功",
  302. message: "证书上传成功",
  303. type: "success",
  304. duration: 2000,
  305. });
  306. this.dataForm.type = [];
  307. this.dataForm.fileIds = '';
  308. this.dataForm.files = [];
  309. this.listQuery.page = 1;
  310. this.getDataList();
  311. })
  312. .catch(() => { });
  313. } else {
  314. return false;
  315. }
  316. });
  317. },
  318. getDataList() {
  319. certificatePage(this.listQuery).then(response => {
  320. this.dataList = response.data.data.items;
  321. this.total = response.data.data.total;
  322. })
  323. },
  324. handleSizeChange(val) {
  325. this.listQuery.limit = val
  326. this.getDataList()
  327. },
  328. handleCurrentChange(val) {
  329. this.listQuery.page = val
  330. this.getDataList()
  331. },
  332. getTypeListCite() {
  333. dictList({ dictType: 'customer_treward_type' }).then(response => {
  334. this.typeListCite = response.data.data;
  335. })
  336. },
  337. getAllUserList() {
  338. allUserList().then(response => {
  339. this.recipientsList = response.data.data;
  340. }).catch(() => { });
  341. },
  342. handleClick(tab, event) {
  343. console.log(tab.name, event);
  344. },
  345. handleRemoveCite(file, fileList) {
  346. console.log(file, fileList);
  347. let fileIds = [];
  348. for (let i in fileList) {
  349. let id = fileList[i].response.data.id;
  350. fileIds.push(id);
  351. }
  352. this.dataFormCite.fileIds = fileIds.join(",");
  353. },
  354. beforeUploadFileCite(file) {
  355. console.log(file);
  356. const size = file.size / 1024 / 1024;
  357. console.log(size);
  358. if (size > 10) {
  359. this.$message.error("文件大小不能超过10MB!");
  360. return false;
  361. }
  362. },
  363. handleAvatarSuccessCite(res, file, fileList) {
  364. console.log(file, fileList);
  365. console.log("------", "==========");
  366. console.log("res = ", res);
  367. let fileIds = [];
  368. for (let i in fileList) {
  369. let response = fileList[i].response;
  370. if (response.errno && response.errno != "0") {
  371. this.$message.error("该文件上传失败,已被移除,请重新上传!");
  372. // 上传失败移除该 file 对象
  373. fileList.splice(i, 1);
  374. } else {
  375. let id = fileList[i].response.data.id;
  376. fileIds.push(id);
  377. }
  378. }
  379. this.dataFormCite.fileIds = fileIds.join(",");
  380. },
  381. submitFormCite() {
  382. this.$refs['dataFormCite'].validate((valid) => {
  383. if (valid) {
  384. uploadCite(this.dataFormCite)
  385. .then((response) => {
  386. this.dialogVisibleCite = false;
  387. this.$notify({
  388. title: "成功",
  389. message: "表彰上传成功",
  390. type: "success",
  391. duration: 2000,
  392. });
  393. this.dataFormCite.type = [];
  394. this.dataFormCite.fileIds = '';
  395. this.dataFormCite.files = [];
  396. this.listQueryCite.page = 1;
  397. this.getDataListCite();
  398. })
  399. .catch(() => { });
  400. } else {
  401. return false;
  402. }
  403. });
  404. },
  405. getDataListCite() {
  406. citeList(this.listQueryCite).then(response => {
  407. this.dataListCite = response.data.data.items;
  408. this.totalCite = response.data.data.total;
  409. })
  410. },
  411. handleSizeChangeCite(val) {
  412. this.listQueryCite.limit = val
  413. this.getDataListCite()
  414. },
  415. handleCurrentChangeCite(val) {
  416. this.listQueryCite.page = val
  417. this.getDataListCite()
  418. },
  419. },
  420. };
  421. </script>
  422. <style scoped>
  423. .text-overflow {
  424. overflow: hidden;
  425. text-overflow: ellipsis;
  426. display: -webkit-box;
  427. -webkit-box-orient: vertical;
  428. -webkit-line-clamp: 1;
  429. }
  430. .right-wrap {
  431. width: 100%;
  432. }
  433. .myPage {
  434. margin-top: 30px;
  435. display: flex;
  436. justify-content: center;
  437. align-items: center;
  438. }
  439. .gainList_container {
  440. min-height: 560px;
  441. }
  442. .gainList_container .gains_wrapper {
  443. position: relative;
  444. box-sizing: border-box;
  445. padding-top: 20px;
  446. padding-left: 20px;
  447. }
  448. .gainList_container .gains_wrapper .list {
  449. display: flex;
  450. flex-wrap: wrap;
  451. margin: -20px 0 0 -20px;
  452. }
  453. .item.isVirtual {
  454. background: #f7f8fa;
  455. border: 1px solid #e5e6eb;
  456. }
  457. .item {
  458. display: flex;
  459. align-items: center;
  460. flex: 0 1 auto;
  461. width: calc(50% - 30px);
  462. min-width: 410px;
  463. height: 116px;
  464. padding-right: 6px;
  465. background: #fff;
  466. border: 1px solid #e5e6eb;
  467. box-sizing: border-box;
  468. border-radius: 4px;
  469. margin-right: 20px;
  470. margin-top: 20px;
  471. }
  472. .item .img-wapper {
  473. width: 114px;
  474. height: 114px;
  475. margin-right: 16px;
  476. background: #f7f8fa;
  477. display: flex;
  478. align-items: center;
  479. justify-content: center;
  480. }
  481. .item .img-wapper .item-icon {
  482. max-width: 72px;
  483. max-height: 72px;
  484. }
  485. .item .main {
  486. flex: auto;
  487. }
  488. .item .date,
  489. .item .goods_name {
  490. overflow: hidden;
  491. text-overflow: ellipsis;
  492. }
  493. .item .goods_name {
  494. display: -webkit-box;
  495. -webkit-box-orient: vertical;
  496. -webkit-line-clamp: 1;
  497. font-size: 16px;
  498. line-height: 24px;
  499. color: #252933;
  500. padding-bottom: 4px;
  501. }
  502. .item p {
  503. margin: 0;
  504. }
  505. .item .date {
  506. white-space: nowrap;
  507. font-size: 14px;
  508. line-height: 22px;
  509. color: #8a919f;
  510. }
  511. .item .buttons {
  512. margin-top: 8px;
  513. margin-left: -8px;
  514. display: flex;
  515. align-items: center;
  516. }
  517. .item .button-item.actived {
  518. background: #f2f3f5;
  519. color: #8a919f;
  520. }
  521. .item .button-item {
  522. cursor: pointer;
  523. display: flex;
  524. align-items: center;
  525. font-size: 13px;
  526. padding: 0 8px;
  527. height: 26px;
  528. margin-left: 8px;
  529. font-weight: 500;
  530. background: #f2f3f5;
  531. border-radius: 50px;
  532. color: #8a919f;
  533. white-space: nowrap;
  534. border: none;
  535. }
  536. .item .arrow {
  537. width: 12px;
  538. height: 12px;
  539. margin-left: 2px;
  540. transform: rotate(-90deg);
  541. }
  542. svg:not(:root) {
  543. overflow: hidden;
  544. }
  545. .item .button-item svg path {
  546. fill: currentColor;
  547. }
  548. .status {
  549. margin-right: 30px;
  550. font-size: 13px;
  551. }
  552. .status.bottom {
  553. margin-top: 55px;
  554. }
  555. .status .use-btn {
  556. color: #1e80ff;
  557. }
  558. .timeline-container {
  559. margin: 0 auto;
  560. }
  561. .timeline-entry-list {
  562. margin-right: 17.5rem;
  563. border-radius: 2px;
  564. width: 720px;
  565. position: relative;
  566. }
  567. .entry-list-container {
  568. background-color: #fff;
  569. border-radius: 4px;
  570. min-height: 500px;
  571. }
  572. .entry-list-container .tab-header {
  573. display: flex;
  574. align-items: center;
  575. justify-content: space-between;
  576. padding: 20px 20px 16px;
  577. border-bottom: 1px solid #e5e6eb;
  578. overflow: hidden;
  579. }
  580. .tab-header .tab-title {
  581. white-space: nowrap;
  582. font-size: 18px;
  583. font-weight: 600;
  584. }
  585. .content-body {
  586. padding: 10px 20px 16px;
  587. }
  588. .serie {
  589. margin: 0 0 40px;
  590. }
  591. .serie .serie-title {
  592. height: 32px;
  593. width: 100%;
  594. display: flex;
  595. justify-content: center;
  596. align-items: center;
  597. text-align: center;
  598. margin-bottom: 20px;
  599. }
  600. .serie .serie-title .title {
  601. font-style: normal;
  602. font-weight: 600;
  603. font-size: 20px;
  604. color: #1d2129;
  605. margin: 0 16px;
  606. }
  607. .serie .serie-title .series-left,
  608. .serie .serie-title .series-right {
  609. width: 16px;
  610. height: 2px;
  611. }
  612. img {
  613. border-style: none;
  614. }
  615. .serie .badge-icon-list {
  616. display: grid;
  617. justify-content: space-between;
  618. grid-template-columns: repeat(auto-fill, 150px);
  619. grid-gap: 10px 20px;
  620. flex-wrap: wrap;
  621. }
  622. .serie .badge-icon-list .badge-icon-item {
  623. -webkit-tap-highlight-color: transparent;
  624. cursor: pointer;
  625. width: 150px;
  626. font-style: normal;
  627. font-weight: 400;
  628. display: flex;
  629. flex-direction: column;
  630. justify-content: center;
  631. align-items: center;
  632. }
  633. .serie .badge-icon-list .badge-icon-item .badge-item-icon {
  634. width: 65px;
  635. height: 65px;
  636. }
  637. .serie .badge-icon-list .badge-icon-item .badge-item-icon .not-obtain {
  638. filter: grayscale(100%);
  639. }
  640. .serie .badge-icon-list .badge-icon-item .badge-item-icon img {
  641. width: 100%;
  642. height: 100%;
  643. }
  644. .serie .badge-icon-list .badge-icon-item .badge-desc {
  645. /* margin-top: -10px; */
  646. text-align: center;
  647. color: #1d2129;
  648. font-size: 16px;
  649. line-height: 28px;
  650. }
  651. .serie .badge-icon-list .badge-icon-item .obtain-date {
  652. font-size: 14px;
  653. text-align: center;
  654. color: #86909c;
  655. height: 24px;
  656. line-height: 24px;
  657. }
  658. </style>