EarnPoints.vue 22 KB

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