prodTemplate.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <div class="mod-prod-prodTemplate">
  3. <!-- 搜索相关区域 -->
  4. <div class="search-bar">
  5. <el-form :inline="true" class="search-form" ref="searchForm" :model="searchForm" label-width="auto" size="small">
  6. <!-- 表单项 -->
  7. <div class="input-row">
  8. <el-form-item prop="templateStyleId" :label="$t('prodTemplate.templateStyle')+':'">
  9. <el-select v-model="searchForm.templateStyleId" clearable filterable>
  10. <el-option
  11. v-for="node in styleList"
  12. :key="node.styleId"
  13. :label="node.styleName"
  14. :value="node.styleId"
  15. ></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item prop="templateSeriesId" :label="$t('prodTemplate.templateSeries')+':'">
  19. <el-select v-model="searchForm.templateSeriesId" clearable filterable>
  20. <el-option
  21. v-for="node in seriesList"
  22. :key="node.seriesId"
  23. :label="node.seriesName"
  24. :value="node.seriesId"
  25. ></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item prop="templateSide" label="正背面">
  29. <el-select v-model="searchForm.templateSide" clearable filterable>
  30. <el-option :key="1" label="正面" :value="'Front'"></el-option>
  31. <el-option :key="2" label="背面" :value="'Back'"></el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item prop="templateUsage" label="用途">
  35. <el-select v-model="searchForm.templateUsage" clearable filterable>
  36. <el-option
  37. v-for="node in templateUsageList"
  38. :key="node.value"
  39. :label="node.label"
  40. :value="node.value"
  41. ></el-option>
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item>
  45. <div class="default-btn primary-btn" @click="searchChange()">{{ $t('crud.searchBtn') }}</div>
  46. <div class="default-btn" @click="resetForm()">{{ $t('shop.resetMap') }}</div>
  47. </el-form-item>
  48. </div>
  49. </el-form>
  50. </div>
  51. <!-- 列表相关区域 -->
  52. <div class="main-container">
  53. <div class="operation-bar">
  54. <div class="default-btn primary-btn" @click="addOrUpdateHandle()"
  55. >{{$t("crud.addTitle")}}</div>
  56. </div>
  57. <div class="table-con spec-table">
  58. <el-table
  59. ref="specListTable"
  60. :data="dataList"
  61. header-cell-class-name="table-header"
  62. row-class-name="table-row"
  63. style="width: 100%">
  64. <!-- 模板图片地址 -->
  65. <!--<el-table-column :label="$t('prodTemplate.templatePic')" prop="templatePic" align="center">
  66. <template slot-scope="scope">
  67. <span>{{ scope.row.templatePic}}</span>
  68. </template>
  69. </el-table-column>-->
  70. <el-table-column
  71. align="center"
  72. prop="templatePic"
  73. :label="$t('prodTemplate.templatePic')"
  74. width="300">
  75. <template slot-scope="scope">
  76. <el-image
  77. style="width: 100px; height: 100px"
  78. :src="resourcesUrl + scope.row.templatePic"
  79. v-if="scope.row.templatePic"
  80. fit="fill"
  81. @click="previewPic(scope.row)"
  82. />
  83. </template>
  84. </el-table-column>
  85. <!-- 模板风格 -->
  86. <el-table-column :label="$t('prodTemplate.templateStyle')" prop="templateStyle" align="center">
  87. <template slot-scope="scope">
  88. <span>{{ scope.row.templateStyle}}</span>
  89. </template>
  90. </el-table-column>
  91. <!-- 模板下风格的系列,比如二次元风格的海贼王系列 -->
  92. <el-table-column :label="$t('prodTemplate.templateSeries')" prop="templateSeries" align="center">
  93. <template slot-scope="scope">
  94. <span>{{ scope.row.templateSeries}}</span>
  95. </template>
  96. </el-table-column>
  97. <el-table-column :label="$t('prodTemplate.templateUsage')" prop="usageList" align="center">
  98. <template slot-scope="scope">
  99. <div class="table-cell-text">{{ scope.row.usageList != null? scope.row.usageList.join('/'): "" }}</div>
  100. </template>
  101. </el-table-column>
  102. <!-- 模板面,Front:正面,Back:背面 -->
  103. <el-table-column :label="$t('prodTemplate.templateSide')" prop="templateSide" align="center">
  104. <template slot-scope="scope">
  105. <span v-if="scope.row.templateSide == 'Front'">正面</span>
  106. <span v-if="scope.row.templateSide == 'Back'">背面</span>
  107. </template>
  108. </el-table-column>
  109. <el-table-column :label="$t('prodTemplate.status')" prop="status" align="center">
  110. <template slot-scope="scope">
  111. <el-tag type="success" v-if="scope.row.status == 1">启用</el-tag>
  112. <el-tag type="danger" v-if="scope.row.status == 0">禁用</el-tag>
  113. </template>
  114. </el-table-column>
  115. <el-table-column label="排序" prop="seq" align="center">
  116. <template slot-scope="scope">
  117. <span>{{ scope.row.seq}}</span>
  118. </template>
  119. </el-table-column>
  120. <el-table-column align="center" fixed="right" :label="$t('publics.operating')" width="auto">
  121. <template slot-scope="scope">
  122. <div class="text-btn-con">
  123. <div class="default-btn text-btn" @click="addOrUpdateHandle(scope.row.templateId)"
  124. >{{$t("crud.updateBtn")}}</div>
  125. <div class="default-btn text-btn" @click.stop="deleteHandle(scope.row.templateId)"
  126. >{{$t("text.delBtn")}}</div>
  127. </div>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. </div>
  132. <el-pagination
  133. v-if="dataList.length"
  134. @size-change="handleSizeChange"
  135. @current-change="handleCurrentChange"
  136. :current-page="page.currentPage"
  137. :page-sizes="[10, 20, 50, 100]"
  138. :page-size="page.pageSize"
  139. layout="total, sizes, prev, pager, next, jumper"
  140. :total="page.total">
  141. </el-pagination>
  142. </div>
  143. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="refreshChange"></add-or-update>
  144. <el-dialog :visible.sync="previewPicDialogVisible" :modal="false" title="图片预览" width="30%" top="3vh">
  145. <el-image :src="previewPicUrl" alt="" style="width: 100%; height: 100%"/>
  146. </el-dialog>
  147. </div>
  148. </template>
  149. <script>
  150. import AddOrUpdate from './prodTemplate-add-or-update'
  151. export default {
  152. data () {
  153. return {
  154. dataList: [],
  155. page: {
  156. total: 0, // 总页数
  157. currentPage: 1, // 当前页数
  158. pageSize: 10 // 每页显示多少条
  159. },
  160. searchForm: {
  161. templateStyleId: null,
  162. templateSeriesId: null,
  163. templateUsage: null
  164. }, // 搜索
  165. dataListLoading: false,
  166. addOrUpdateVisible: false,
  167. seriesList: [],
  168. styleList: [],
  169. usageList:[],
  170. resourcesUrl: process.env.VUE_APP_RESOURCES_URL,
  171. previewPicUrl: null,
  172. previewPicDialogVisible: false,
  173. templateUsageList:[{label:'小卡', value:'YXK'},{label:'3寸花式拍立得', value:'FP'}
  174. ,{label:'4寸花式拍立得', value:'4CFP'},{label:'5寸花式拍立得', value:'5CFP'}
  175. ,{label:'明信片', value:'MXP'},{label:'票根', value:'PG'},{label:'书签', value:'SQ'}
  176. ,{label:'竖版四宫格', value:'SBSGG'},{label:'田字四宫格', value:'TZSGG'},
  177. {label:'3寸仿真拍立得', value:'3CFZFP'},{label:'4寸仿真拍立得', value:'4CFZFP'},{label:'5寸仿真拍立得', value:'5CFZFP'}]
  178. }
  179. },
  180. components: {
  181. AddOrUpdate
  182. },
  183. created () {
  184. this.getDataList()
  185. this.getStyleList()
  186. this.getSeriesList()
  187. },
  188. mounted () {
  189. },
  190. methods: {
  191. previewPic(row){
  192. this.previewPicUrl = this.resourcesUrl + row.templatePic
  193. this.previewPicDialogVisible = true;
  194. },
  195. getStyleList () {
  196. this.$http({
  197. url: this.$http.adornUrl('/prod/prodTemplateStyle/page'),
  198. method: 'get',
  199. params: this.$http.adornParams(
  200. Object.assign({
  201. size: 100,
  202. shopId: this.$store.state.user.shopId
  203. },
  204. )
  205. )
  206. }).then(({data}) => {
  207. this.styleList = data.records
  208. })
  209. },
  210. getSeriesList () {
  211. this.$http({
  212. url: this.$http.adornUrl('/prod/prodTemplateSeries/page'),
  213. method: 'get',
  214. params: this.$http.adornParams(
  215. Object.assign({
  216. size: 100,
  217. shopId: this.$store.state.user.shopId
  218. },
  219. )
  220. )
  221. }).then(({data}) => {
  222. this.seriesList = data.records
  223. })
  224. },
  225. getDataList (page) {
  226. this.dataListLoading = true
  227. this.$http({
  228. url: this.$http.adornUrl('/prod/prodTemplate/page'),
  229. method: 'get',
  230. params: this.$http.adornParams(
  231. Object.assign({
  232. current: page == null ? this.page.currentPage : page.currentPage,
  233. size: page == null ? this.page.pageSize : page.pageSize,
  234. shopId: this.$store.state.user.shopId,
  235. },
  236. this.searchForm
  237. )
  238. )
  239. }).then(({data}) => {
  240. this.dataList = data.records
  241. this.page.total = data.total
  242. this.dataListLoading = false
  243. })
  244. },
  245. // 新增 / 修改
  246. addOrUpdateHandle (id) {
  247. this.addOrUpdateVisible = true
  248. this.$nextTick(() => {
  249. this.$refs.addOrUpdate.init(id)
  250. })
  251. },
  252. deleteHandle (id) {
  253. this.$confirm(this.$i18n.t('admin.isDeleOper') + '?', this.$i18n.t('text.tips'), {
  254. confirmButtonText: this.$i18n.t('crud.filter.submitBtn'),
  255. cancelButtonText: this.$i18n.t('crud.filter.cancelBtn'),
  256. type: 'warning'
  257. }).then(() => {
  258. this.$http({
  259. url: this.$http.adornUrl('/prod/prodTemplate/' + id),
  260. method: 'delete',
  261. data: this.$http.adornData({})
  262. }).then(({ data }) => {
  263. this.$message({
  264. message: this.$i18n.t('publics.operation'),
  265. type: 'success',
  266. duration: 100,
  267. onClose: () => {
  268. this.refreshChange()
  269. }
  270. })
  271. })
  272. }).catch(() => { })
  273. },
  274. resetForm () {
  275. this.searchForm = {
  276. templateStyleId: null,
  277. templateSeriesId: null
  278. }
  279. },
  280. // 刷新回调
  281. refreshChange () {
  282. this.getDataList(this.page)
  283. },
  284. searchChange () {
  285. // this.searchForm = params
  286. this.getDataList(this.page)
  287. },
  288. handleSizeChange (val) {
  289. this.page.pageSize = val
  290. this.getDataList()
  291. },
  292. handleCurrentChange (val) {
  293. this.page.currentPage = val
  294. this.getDataList()
  295. }
  296. }
  297. }
  298. </script>
  299. <style lang="scss">
  300. .mod-prod-prodTemplate {
  301. }
  302. </style>