medal.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <el-card shadow="never" class="aui-card--fill">
  3. <div class="mod-home">
  4. <div class="top adfacjb">
  5. <div class="top-left">勋章管理</div>
  6. <div class="top-right">
  7. <el-button type="primary" @click="handleAdd">新增勋章</el-button>
  8. </div>
  9. </div>
  10. <el-table :data="dataList" border cell-class-name="vertical-top-cell" v-loading="loading" empty-text="暂无勋章" style="margin-top: 20px;">
  11. <el-table-column prop="medalName" label="勋章名称"></el-table-column>
  12. <el-table-column prop="xxx" label="勋章图片">
  13. <template slot-scope="scope">
  14. <img :src="scope.row.imageUrl" style="width: 90px;height: auto;">
  15. </template>
  16. </el-table-column>
  17. <el-table-column prop="issueBeginTime" label="发放开始时间"></el-table-column>
  18. <el-table-column prop="issueEndTime" label="发放结束时间"></el-table-column>
  19. <el-table-column prop="remark" label="备注"></el-table-column>
  20. <el-table-column label="操作">
  21. <template slot-scope="scope">
  22. <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
  23. <!-- <el-button type="text" @click="handleOpenClose(1)">启用</el-button> -->
  24. <!-- <el-button type="text" @click="handleOpenClose(0)">停用</el-button> -->
  25. <el-button type="text" @click="handleDelete(scope.row)" v-if="scope.row.isDefault==0">删除</el-button>
  26. </template>
  27. </el-table-column>
  28. </el-table>
  29. <el-pagination
  30. :current-page="queryParams.page"
  31. :page-sizes="[10, 20, 50, 100]"
  32. :page-size="queryParams.limit"
  33. :total="total"
  34. layout="total, sizes, prev, pager, next, jumper"
  35. @size-change="pageSizeChangeHandle"
  36. @current-change="pageCurrentChangeHandle">
  37. </el-pagination>
  38. </div>
  39. <el-dialog width="800px" :visible.sync="show" :title="title" @close="cancel">
  40. <el-form ref="medalRef" :model="form" :rules="rules" label-width="110px" style="width: 70%;margin: 0 auto;">
  41. <el-form-item label="勋章名称" prop="medalName">
  42. <el-input v-model="form.medalName" placeholder="请输入勋章名称"></el-input>
  43. </el-form-item>
  44. <el-form-item label="勋章图片" class="redLabel">
  45. <el-upload
  46. :action="url"
  47. :file-list="fileList"
  48. :limit="1"
  49. :before-upload="file => beforeUploadHandle(file, [180, 180])"
  50. list-type="picture-card"
  51. :on-success="successHandle"
  52. :on-remove="handleRemove"
  53. class="upload-demo"
  54. >
  55. <i class="el-icon-plus"></i>
  56. </el-upload>
  57. <div class="upload_tip">建议尺寸:180*180像素,点击上传勋章图片</div>
  58. </el-form-item>
  59. <el-form-item label="发放开始时间" :class="{'red':form.isDefault===0}">
  60. <el-date-picker v-model="form.issueBeginTime" type="datetime" format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" :disabled="form.isDefault===1"></el-date-picker>
  61. </el-form-item>
  62. <el-form-item label="发放结束时间" :class="{'red':form.isDefault===0}">
  63. <el-date-picker v-model="form.issueEndTime" type="datetime" format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" :disabled="form.isDefault===1"></el-date-picker>
  64. </el-form-item>
  65. <el-form-item label="备注">
  66. <el-input v-model="form.remark" placeholder="请输入备注" :disabled="form.isDefault===1"></el-input>
  67. </el-form-item>
  68. </el-form>
  69. <div class="demo-drawer__footer" style="display: flex;justify-content: end;margin-top: 200px;">
  70. <el-button :loading="buttonLoading" type="primary" @click="submitForm">保 存</el-button>
  71. <el-button @click="cancel" style="margin-right: 5%;">取 消</el-button>
  72. </div>
  73. </el-dialog>
  74. </el-card>
  75. </template>
  76. <script>
  77. import moment from 'moment'
  78. import Cookies from 'js-cookie'
  79. export default {
  80. data () {
  81. return {
  82. dataList: [],
  83. total: 0,
  84. loading: false,
  85. queryParams: {
  86. page: 1,
  87. limit: 10
  88. },
  89. show: false,
  90. title: '新增勋章',
  91. form: {
  92. id: '',
  93. isDefault: 0,
  94. medalName: '',
  95. imageUrl: '',
  96. issueBeginTime: '',
  97. issueEndTime: '',
  98. remark: ''
  99. },
  100. rules: {
  101. medalName: [
  102. { required: true, message: '请输入勋章名称', trigger: 'blur' }
  103. ],
  104. issueBeginTime: [
  105. { required: true, message: '请选择发放开始时间', trigger: 'change' }
  106. ],
  107. issueEndTime: [
  108. { required: true, message: '请选择发放结束时间', trigger: 'change' }
  109. ]
  110. },
  111. buttonLoading: false,
  112. url: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload?token=${Cookies.get('token')}`,
  113. fileList: []
  114. }
  115. },
  116. mounted () {
  117. this.getDataList()
  118. },
  119. methods: {
  120. handleAdd () {
  121. this.title = '新增勋章'
  122. this.show = true
  123. },
  124. handleEdit (row) {
  125. this.title = '编辑勋章'
  126. this.$http.get(`/core/medal/${row.id}`).then(({ data: res }) => {
  127. if (res.code !== 0) return this.$message.error(res.msg)
  128. this.form = res.data
  129. if (this.form.imageUrl) {
  130. this.fileList = [
  131. { name: '', url: this.form.imageUrl }
  132. ]
  133. }
  134. this.show = true
  135. })
  136. },
  137. handleDelete (row) {
  138. this.$confirm('确定要删除该勋章吗?', '提示', {
  139. type: 'warning'
  140. }).then(() => {
  141. this.buttonLoading = true
  142. this.$http.delete('/core/medal', { 'data': [row.id] }).then(({ data: res }) => {
  143. if (res.code !== 0) return this.$message.error(res.msg)
  144. this.$message.success('删除成功')
  145. this.getDataList()
  146. this.buttonLoading = false
  147. })
  148. })
  149. },
  150. handleOpenClose (status) {},
  151. pageSizeChangeHandle (val) {
  152. this.queryParams.limit = val
  153. this.getDataList()
  154. },
  155. pageCurrentChangeHandle (val) {
  156. this.queryParams.page = val
  157. this.getDataList()
  158. },
  159. getDataList () {
  160. this.$http.get('/core/medal/page', { params: this.queryParams }).then(({ data: res }) => {
  161. if (res.code !== 0) return this.$message.error(res.msg)
  162. this.dataList = res.data.list
  163. this.total = res.data.total
  164. })
  165. },
  166. beforeUploadHandle (file, index, fixedNumber) {
  167. if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png') {
  168. this.$message.error(
  169. this.$t('upload.tip', { format: 'jpg、png、gif' })
  170. )
  171. return false
  172. }
  173. },
  174. handleRemove (file, fileList) {
  175. this.fileList = fileList.map((item) => item) || []
  176. this.form.imageUrl = ''
  177. },
  178. successHandle (res, file, fileList) {
  179. if (res.code !== 0) {
  180. return this.$message.error(res.msg)
  181. }
  182. this.fileList.unshift({
  183. name: '',
  184. url: res.data
  185. })
  186. this.form.imageUrl = this.fileList[0].url
  187. },
  188. submitForm () {
  189. this.$refs['medalRef'].validate((valid) => {
  190. if (valid) {
  191. if (!this.form.imageUrl) return this.$message.error('请上传勋章图片')
  192. if (this.form.isDefault === 0) {
  193. if (!this.form.issueBeginTime) return this.$message.error('请选择发放开始时间')
  194. if (!this.form.issueEndTime) return this.$message.error('请选择发放结束时间')
  195. if (Date.parse(this.form.issueBeginTime) > Date.parse(this.form.issueEndTime)) return this.$message.error('发放开始时间不能大于结束时间')
  196. this.form.issueBeginTime = moment(this.form.issueBeginTime).format('YYYY-MM-DD HH:mm:ss')
  197. this.form.issueEndTime = moment(this.form.issueEndTime).format('YYYY-MM-DD HH:mm:ss')
  198. }
  199. this.buttonLoading = true
  200. this.$http[this.form.id ? 'put' : 'post']('/core/medal', this.form).then(({ data: res }) => {
  201. if (res.code !== 0) return this.$message.error(res.msg)
  202. this.$message.success(`${this.form.id ? '编辑' : '新增'}成功`)
  203. this.show = false
  204. this.getDataList()
  205. this.buttonLoading = false
  206. })
  207. } else {
  208. return false
  209. }
  210. })
  211. },
  212. cancel () {
  213. this.form = {
  214. id: '',
  215. isDefault: 0,
  216. medalName: '',
  217. imageUrl: '',
  218. issueBeginTime: '',
  219. issueEndTime: '',
  220. remark: ''
  221. }
  222. this.fileList = []
  223. this.$refs['medalRef'].resetFields()
  224. this.show = false
  225. }
  226. }
  227. }
  228. </script>
  229. <style>
  230. .el-form-item.red .el-form-item__label::before{
  231. content: "*";
  232. color: #F56C6C;
  233. margin-right: 4px;
  234. }
  235. </style>
  236. <style scoped lang="scss">
  237. .top{
  238. &-left{
  239. font-family: PingFang-SC, PingFang-SC;
  240. font-weight: bold;
  241. font-size: 16px;
  242. color: #252525;
  243. line-height: 22px;
  244. }
  245. }
  246. .avatar-uploader-icon {
  247. font-size: 28px;
  248. color: #8c939d;
  249. width: 84px;
  250. height: 84px;
  251. line-height: 84px;
  252. text-align: center;
  253. }
  254. ::v-deep .el-upload--picture-card{
  255. width: 84px !important;
  256. height: 84px !important;
  257. display: flex;
  258. align-items: center;
  259. justify-content: center;
  260. }
  261. .avatar {
  262. width: 84px;
  263. height: 84px;
  264. display: block;
  265. }
  266. .upload-demo{
  267. display: flex !important;
  268. flex-wrap: wrap;
  269. }
  270. ::v-deep .el-upload-list--picture-card .el-upload-list__item{
  271. width: 84px !important;
  272. height: 84px !important;
  273. }
  274. .upload_tip{
  275. font-family: PingFangSC, PingFang SC;
  276. font-weight: 400;
  277. font-size: 12px;
  278. color: #A4A4A4;
  279. line-height: 17px;
  280. margin-top: 2px;
  281. }
  282. ::v-deep .redLabel>.el-form-item__label{
  283. &::before{
  284. content: "*";
  285. color: #F56C6C;
  286. margin-right: 4px;
  287. }
  288. }
  289. </style>