CardManage.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <template>
  2. <div class="card-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="题卡名称:">
  7. <el-input
  8. v-model.trim="filter.title"
  9. placeholder="名称"
  10. clearable
  11. ></el-input>
  12. </el-form-item>
  13. <el-form-item label="创建方式:" label-width="90px">
  14. <el-select
  15. v-model="filter.createMethod"
  16. style="width: 120px;"
  17. placeholder="创建方式"
  18. clearable
  19. >
  20. <el-option
  21. v-for="(val, key) in CARD_CREATE_METHOD_TYPE"
  22. :key="key"
  23. :value="key"
  24. :label="val"
  25. ></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item label="创建时间:">
  29. <el-date-picker
  30. v-model="createTime"
  31. type="datetimerange"
  32. :picker-options="pickerOptions"
  33. range-separator="至"
  34. start-placeholder="创建开始时间"
  35. end-placeholder="创建结束时间"
  36. value-format="timestamp"
  37. align="right"
  38. unlink-panels
  39. >
  40. </el-date-picker>
  41. </el-form-item>
  42. </template>
  43. <el-form-item>
  44. <el-button
  45. v-if="checkPrivilege('button', 'select')"
  46. type="primary"
  47. @click="toPage(1)"
  48. >查询</el-button
  49. >
  50. </el-form-item>
  51. </el-form>
  52. <div class="part-box-action">
  53. <el-button
  54. v-if="checkPrivilege('button', 'add')"
  55. type="primary"
  56. icon="el-icon-circle-plus-outline"
  57. @click="toAdd"
  58. >添加题卡</el-button
  59. >
  60. </div>
  61. </div>
  62. <div class="part-box part-box-pad">
  63. <el-table ref="TableList" :data="cardList">
  64. <el-table-column
  65. type="index"
  66. label="序号"
  67. width="70"
  68. :index="indexMethod"
  69. ></el-table-column>
  70. <el-table-column
  71. prop="title"
  72. label="题卡名称"
  73. min-width="120"
  74. ></el-table-column>
  75. <el-table-column prop="type" label="类型" width="100">
  76. <span slot-scope="scope">{{ scope.row.type | cardTypeFilter }}</span>
  77. </el-table-column>
  78. <el-table-column prop="createMethod" label="创建方式" width="100">
  79. <span slot-scope="scope">{{
  80. scope.row.createMethod | cardCreateMethodTypeFilter
  81. }}</span>
  82. </el-table-column>
  83. <el-table-column prop="status" label="状态" width="100">
  84. <span
  85. :class="{ 'color-danger': scope.row.status !== 'SUBMIT' }"
  86. slot-scope="scope"
  87. >{{ scope.row.status === "SUBMIT" ? "提交" : "暂存" }}</span
  88. >
  89. </el-table-column>
  90. <el-table-column prop="remark" label="备注" min-width="80">
  91. <span slot-scope="scope">{{
  92. scope.row.remark | defaultFieldFilter
  93. }}</span>
  94. </el-table-column>
  95. <el-table-column prop="createTime" label="创建时间" width="170">
  96. <span slot-scope="scope">{{
  97. scope.row.createTime | timestampFilter
  98. }}</span>
  99. </el-table-column>
  100. <el-table-column
  101. class-name="action-column"
  102. label="操作"
  103. width="160"
  104. fixed="right"
  105. >
  106. <template slot-scope="scope">
  107. <el-button
  108. v-if="checkPrivilege('link', 'preview')"
  109. class="btn-primary"
  110. type="text"
  111. @click="toPreview(scope.row)"
  112. >查看</el-button
  113. >
  114. <el-button
  115. v-if="
  116. checkPrivilege('link', 'ConvertImage') && !scope.row.imageUrls
  117. "
  118. class="btn-primary"
  119. type="text"
  120. @click="toConvertImage(scope.row)"
  121. >生成图片</el-button
  122. >
  123. <el-button
  124. v-if="
  125. checkPrivilege('link', 'ConvertImage') && scope.row.imageUrls
  126. "
  127. class="btn-primary"
  128. type="text"
  129. @click="toPreviewImage(scope.row)"
  130. >预览图片</el-button
  131. >
  132. <el-button
  133. v-if="checkPrivilege('link', 'delete')"
  134. class="btn-danger"
  135. type="text"
  136. @click="toDelete(scope.row)"
  137. >删除</el-button
  138. >
  139. <el-button
  140. v-if="
  141. checkPrivilege('link', 'edit') &&
  142. scope.row.createMethod !== 'UPLOAD'
  143. "
  144. class="btn-primary"
  145. type="text"
  146. @click="toEditCard(scope.row)"
  147. >编辑题卡</el-button
  148. >
  149. <el-button
  150. v-if="
  151. checkPrivilege('link', 'edit') && scope.row.type !== 'CUSTOM'
  152. "
  153. class="btn-primary"
  154. type="text"
  155. @click="toEditInfo(scope.row)"
  156. >编辑信息</el-button
  157. >
  158. </template>
  159. </el-table-column>
  160. </el-table>
  161. <div class="part-page">
  162. <el-pagination
  163. background
  164. layout="total, sizes, prev, pager, next, jumper"
  165. :pager-count="5"
  166. :current-page="current"
  167. :total="total"
  168. :page-size="size"
  169. @current-change="toPage"
  170. @size-change="pageSizeChange"
  171. >
  172. </el-pagination>
  173. </div>
  174. </div>
  175. <!-- ModifyCardInfo -->
  176. <modify-card-info
  177. ref="ModifyCardInfo"
  178. :instance="curCard"
  179. @new-card="toNewCard"
  180. @modified="getList"
  181. ></modify-card-info>
  182. <!-- ModifyCard -->
  183. <modify-card ref="ModifyCard" @modified="getList"></modify-card>
  184. <!-- image-preview -->
  185. <simple-image-preview
  186. :cur-image="curImage"
  187. @on-prev="toPrevImage"
  188. @on-next="toNextImage"
  189. ref="SimpleImagePreview"
  190. ></simple-image-preview>
  191. </div>
  192. </template>
  193. <script>
  194. import { CARD_CREATE_METHOD_TYPE } from "../../../constants/enumerate";
  195. import { cardListPage, deleteCard, convertCardImage } from "../api";
  196. import ModifyCardInfo from "../components/ModifyCardInfo";
  197. import pickerOptions from "@/constants/datePickerOptions";
  198. import ModifyCard from "../../card/components/ModifyCard";
  199. import SimpleImagePreview from "@/components/SimpleImagePreview";
  200. export default {
  201. name: "card-manage",
  202. components: { ModifyCardInfo, ModifyCard, SimpleImagePreview },
  203. data() {
  204. return {
  205. filter: {
  206. title: "",
  207. createMethod: "",
  208. createStartTime: "",
  209. createEndTime: ""
  210. },
  211. current: 1,
  212. size: this.GLOBAL.pageSize,
  213. total: 0,
  214. CARD_CREATE_METHOD_TYPE,
  215. cardList: [],
  216. curCard: {},
  217. // date-picker
  218. createTime: [],
  219. pickerOptions,
  220. // image-preview
  221. imageList: [],
  222. curImage: {},
  223. curImageIndex: 0
  224. };
  225. },
  226. mounted() {
  227. this.getList();
  228. },
  229. methods: {
  230. async getList() {
  231. if (!this.checkPrivilege("list", "list")) return;
  232. const datas = {
  233. ...this.filter,
  234. pageNumber: this.current,
  235. pageSize: this.size
  236. };
  237. if (this.createTime) {
  238. datas.createStartTime = this.createTime[0];
  239. datas.createEndTime = this.createTime[1];
  240. }
  241. const data = await cardListPage(datas);
  242. this.cardList = data.records;
  243. this.total = data.total;
  244. },
  245. toPage(page) {
  246. this.current = page;
  247. this.getList();
  248. },
  249. toAdd() {
  250. this.curCard = {};
  251. this.$refs.ModifyCardInfo.open();
  252. },
  253. toPreview(row) {
  254. window.open(
  255. this.getRouterPath({
  256. name: "CardPreview",
  257. params: {
  258. cardId: row.id,
  259. viewType: "view"
  260. }
  261. })
  262. );
  263. },
  264. toNewCard(data) {
  265. this.$ls.set("prepareTcPCard", data);
  266. this.$refs.ModifyCard.open();
  267. },
  268. toEditCard(row) {
  269. this.curCard = row;
  270. this.$ls.set("prepareTcPCard", {
  271. id: row.id,
  272. title: row.title,
  273. type: row.type,
  274. createMethod: row.createMethod,
  275. remark: row.remark,
  276. cardRuleId: row.cardRuleId,
  277. attachmentId: row.attachmentId
  278. });
  279. this.$refs.ModifyCard.open();
  280. },
  281. toEditInfo(row) {
  282. this.curCard = row;
  283. this.$refs.ModifyCardInfo.open();
  284. },
  285. toDelete(row) {
  286. this.$confirm(`确定要删除题卡【${row.title}】吗?`, "提示", {
  287. type: "warning"
  288. })
  289. .then(async () => {
  290. await deleteCard(row.id);
  291. this.$message.success("删除成功!");
  292. this.deletePageLastItem();
  293. })
  294. .catch(() => {});
  295. },
  296. async toConvertImage(row) {
  297. await convertCardImage(row.id);
  298. this.$message.success("操作成功!");
  299. },
  300. // image-preview
  301. toPreviewImage(row) {
  302. this.imageList = row.imageUrls;
  303. this.curImageIndex = 0;
  304. this.selectImage(0);
  305. this.$refs.SimpleImagePreview.open();
  306. },
  307. selectImage(index) {
  308. this.curImage = {
  309. url: this.imageList[index],
  310. filename: Math.floor(index / 2) + 1 + "-" + ((index % 2) + 1)
  311. };
  312. },
  313. toPrevImage() {
  314. if (this.curImageIndex === 0) {
  315. this.curImageIndex = this.imageList.length - 1;
  316. } else {
  317. this.curImageIndex--;
  318. }
  319. this.selectImage(this.curImageIndex);
  320. },
  321. toNextImage() {
  322. if (this.curImageIndex === this.imageList.length - 1) {
  323. this.curImageIndex = 0;
  324. } else {
  325. this.curImageIndex++;
  326. }
  327. this.selectImage(this.curImageIndex);
  328. }
  329. }
  330. };
  331. </script>