index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <div class="app-container">
  3. <div>
  4. <el-form ref="form" :model="activationCode" :rules="rulesActivationCode" label-width="80px">
  5. <el-form-item label="租户信息" prop="tenantCode">
  6. <el-select v-model="activationCode.tenantCode" placeholder="请选择">
  7. <el-option
  8. v-for="item in tenantList"
  9. :key="item.tenantId"
  10. :label="item.tenantName"
  11. :value="item.tenantId">
  12. </el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="充值时间" prop="tenantExpirationDate" style="width: 300px">
  16. <el-input v-model="activationCode.tenantExpirationDate" placeholder="请输入充值天数"></el-input>
  17. </el-form-item>
  18. </el-form>
  19. <div slot="footer" class="dialog-footer">
  20. <el-button type="primary" @click="crateCode">生成激活码</el-button>
  21. <el-button @click="cancel">取 消</el-button>
  22. </div>
  23. <!-- 激活码生成成功-->
  24. <el-dialog :title="title" :visible.sync="activationCodeForm" width="500px" append-to-body>
  25. <span v-html="actCode"></span>
  26. <div slot="footer" class="dialog-footer">
  27. <el-button type="primary" @click="copyToClipboard">一键复制</el-button>
  28. <el-button @click="cancel">取 消</el-button>
  29. </div>
  30. </el-dialog>
  31. </div>
  32. <div style="margin-top: 30px">
  33. <!--搜索条件表单-->
  34. <el-form
  35. :model="queryParams"
  36. ref="queryForm"
  37. size="small"
  38. :inline="true"
  39. v-show="showSearch"
  40. label-width="68px"
  41. >
  42. <el-form-item label="登录地址" prop="ipAddress">
  43. <el-input
  44. v-model="queryParams.ipAddress"
  45. placeholder="请输入登录地址"
  46. clearable
  47. style="width: 240px;"
  48. @keyup.enter.native="handleQuery"
  49. />
  50. </el-form-item>
  51. <el-form-item label="操作人员" prop="operator">
  52. <el-input
  53. v-model="queryParams.operator"
  54. placeholder="请输入操作人员"
  55. clearable
  56. style="width: 240px"
  57. @keyup.enter.native="handleQuery"
  58. />
  59. </el-form-item>
  60. <el-form-item label="操作时间">
  61. <el-date-picker
  62. v-model="dateRange"
  63. style="width: 240px"
  64. value-format="yyyy-MM-dd HH:mm:ss"
  65. type="daterange"
  66. range-separator="-"
  67. start-placeholder="开始日期"
  68. end-placeholder="结束日期"
  69. :default-time="['00:00:00', '23:59:59']"
  70. ></el-date-picker>
  71. </el-form-item>
  72. <el-form-item>
  73. <el-button
  74. type="primary"
  75. icon="el-icon-search"
  76. size="mini"
  77. @click="handleQuery"
  78. >搜索</el-button
  79. >
  80. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  81. >重置</el-button
  82. >
  83. </el-form-item>
  84. </el-form>
  85. <!--表格-->
  86. <el-table
  87. ref="tables"
  88. v-loading="loading"
  89. :data="list"
  90. @selection-change="handleSelectionChange"
  91. :default-sort="defaultSort"
  92. @sort-change="handleSortChange"
  93. style="margin-top: 20px"
  94. >
  95. <el-table-column type="selection" width="50" align="center" />
  96. <el-table-column label="日志编号" align="center" prop="logId" />
  97. <el-table-column label="操作人员" align="center" prop="operator" />
  98. <el-table-column
  99. label="操作ip地址"
  100. align="center"
  101. prop="ipAddress"
  102. :show-overflow-tooltip="true"
  103. />
  104. <el-table-column
  105. label="操作日期"
  106. align="center"
  107. prop="generationTime"
  108. sortable="custom"
  109. :sort-orders="['descending', 'ascending']"
  110. >
  111. <template slot-scope="scope">
  112. <span>{{ parseTime(scope.row.generationTime) }}</span>
  113. </template>
  114. </el-table-column>
  115. <el-table-column label="备注" align="center" prop="note">
  116. </el-table-column>
  117. </el-table>
  118. <!--分页器-->
  119. <pagination
  120. v-show="total > 0"
  121. :total="total"
  122. :page.sync="queryParams.pageNum"
  123. :limit.sync="queryParams.pageSize"
  124. @pagination="getCodeLogList"
  125. />
  126. </div>
  127. </div>
  128. </template>
  129. <script>
  130. import {
  131. listTenant,
  132. createTenantCode
  133. } from "@/api/system/tenant";
  134. import {list, delActivationLog, cleanActivationLog} from "@/api/monitor/activationcode";
  135. import Clipboard from 'clipboard';
  136. export default {
  137. name: "TenantCode",
  138. data() {
  139. return {
  140. options: [],
  141. //表单校验
  142. rulesActivationCode: {
  143. tenantCode: [
  144. { required: true, message: "未选择租户信息", trigger: "blur" },
  145. ],
  146. tenantExpirationDate: [
  147. { required: true, message: "租户到期时间为设置", trigger: "blur" },
  148. ],
  149. },
  150. activationCode: {},
  151. //租户信息表格数据
  152. tenantList: [],
  153. activationCodeForm: false,
  154. actCode:"",
  155. title:"激活码生成成功",
  156. // 遮罩层
  157. loading: true,
  158. // 选中数组
  159. ids: [],
  160. // 非多个禁用
  161. multiple: true,
  162. // 显示搜索条件
  163. showSearch: true,
  164. // 总条数
  165. total: 0,
  166. // 表格数据
  167. list: [],
  168. // 是否显示弹出层
  169. open: false,
  170. // 日期范围
  171. dateRange: [],
  172. // 默认排序
  173. defaultSort: { prop: "operTime", order: "descending" },
  174. // 表单参数
  175. form: {},
  176. // 查询参数
  177. queryParams: {
  178. pageNum: 1,
  179. pageSize: 10,
  180. operator: undefined,
  181. ipAddress: undefined
  182. },
  183. }
  184. },
  185. computed: {
  186. },
  187. created() {
  188. this.getList();
  189. this.getCodeLogList();
  190. },
  191. methods: {
  192. //查询租户信息列表
  193. getList() {
  194. listTenant(this.queryParams).then((response) => {
  195. this.tenantList = response.rows;
  196. });
  197. },
  198. //创建激活码
  199. crateCode(){
  200. createTenantCode(this.activationCode).then((response) => {
  201. this.activationCodeForm=true;
  202. this.actCode=response.msg;
  203. });
  204. },
  205. //激活码复制操作
  206. copyToClipboard() {
  207. //创建一个新 Clipboard 实例,将目标元素和复制成功时的回调传递给它
  208. const clipboard = new Clipboard('button', {
  209. text: () => this.actCode, //在这里替换为你要复制的文本
  210. });
  211. clipboard.on('success', () => {
  212. this.activationCodeForm=false;
  213. console.log('');
  214. this.$message({showClose: true, message: '文本已成功复制到剪贴板', type: 'success'});
  215. clipboard.destroy(); //清除 Clipboard 实例
  216. });
  217. clipboard.on('error', () => {
  218. console.error('复制失败');
  219. clipboard.destroy(); //清除 Clipboard 实例
  220. });
  221. //触发按钮点击事件,开始复制操作
  222. clipboard.onClick({
  223. action: 'copy',
  224. });
  225. },
  226. //取消按钮
  227. cancel() {
  228. this.open = false;
  229. this.reset();
  230. },
  231. //激活码日志信息
  232. getCodeLogList() {
  233. this.loading = true;
  234. list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
  235. this.list = response.rows;
  236. this.total = response.total;
  237. this.loading = false;
  238. }
  239. );
  240. },
  241. /** 重置按钮操作 */
  242. resetQuery() {
  243. this.dateRange = [];
  244. this.resetForm("queryForm");
  245. this.queryParams.pageNum = 1;
  246. this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order);
  247. },
  248. /** 多选框选中数据 */
  249. handleSelectionChange(selection) {
  250. this.ids = selection.map((item) => item.logId);
  251. this.multiple = !selection.length;
  252. },
  253. /** 排序触发事件 */
  254. handleSortChange(column, prop, order) {
  255. this.queryParams.orderByColumn = column.prop;
  256. this.queryParams.isAsc = column.order;
  257. this.getList();
  258. },
  259. /** 搜索按钮操作 */
  260. handleQuery() {
  261. this.queryParams.pageNum = 1;
  262. this.getCodeLogList();
  263. },
  264. },
  265. };
  266. </script>