123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- <template>
- <div class="layout-pd">
- <el-row>
- <!--操作-->
- <el-col :xs="24">
- <el-card class="mt8" shadow="never" :body-style="{ paddingBottom: '0' }">
- <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
- <h1 style="margin-bottom: 10px;font-size: 30px;">油机授权码申请</h1>
- </div>
- <div v-if="state.msgDisplay" style="width: 100%;display: flex;justify-content: center;align-items: center;">
- <h1 style="margin-bottom: 10px;color: #81B337;font-size: 20px;">授权码申请成功</h1>
- </div>
- <div style="width: 100%;">
- <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
- <el-form-item label="油站名称" style="width: 100%;">
- <el-input v-model="state.filter.station" style="width: 100%;" placeholder="请输入油站名称"
- @keyup.enter="onQuery" />
- </el-form-item>
- </el-form>
- </div>
- <div style="width: 100%;">
- <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
- <el-form-item label="油机id" style="width: 100%;">
- <el-input v-model="state.filter.dispenserID" style="width: 100%;" placeholder="请输入油机id"
- @keyup.enter="onQuery" />
- </el-form-item>
- </el-form>
- </div>
- <div v-if="state.pwdDisplay" style="width: 100%;">
- <el-form :inline="true" @submit.stop.prevent style="width: 20%;">
- <el-form-item label="油机授权码" style="width: 82%;">
- <el-input disabled v-model="state.pwd" style="width: 100%;" placeholder="油机授权码"
- @keyup.enter="onQuery" />
- </el-form-item>
- <el-form-item>
- <el-button id="copyBtn" :data-clipboard-text="state.pwd" type="primary" @click="onCopy()">复制</el-button>
- </el-form-item>
- </el-form>
- </div>
- <hr>
- <!-- 按钮 -->
- <el-row justify="space-between" class="submit-button">
- <el-row>
- </el-row>
- <el-row>
- <div v-if="state.btnDisplay" style="display: flex;justify-content: center;align-items: center;">
- <el-button style="margin-top: 10px;margin-bottom: 10px;width: 264px;height: 42px;" type="primary"
- @click="onQuery">申请油机授权码</el-button>
- </div>
- </el-row>
- </el-row>
- </el-card>
- </el-col>
- <!--表格-->
- <el-col :xs="24">
- <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
- <el-table ref="multipleTableRef" v-loading="state.loading" stripe :data="state.tableModel" row-key="id"
- style="width: 100%">
- <el-table-column type="index" label="记录" width="60" />
- <el-table-column v-for="column in state.dynamicColumns" :key="column.prop" :prop="column.prop"
- :label="column.label" />
- </el-table>
- <div class="my-flex my-flex-end" style="margin-top: 20px">
- <el-pagination v-model:currentPage="state.pageInput.CurrentPage"
- v-model:page-size="state.pageInput.PageSize" :total="state.total" :page-sizes="[10, 20, 50, 100]" small
- background @size-change="onSizeChange" @current-change="onCurrentChange"
- layout="total, sizes, prev, pager, next, jumper" />
- </div>
- </el-card>
- </el-col>
- </el-row>
- </div>
- </template>
- <script setup lang="ts" name="authorize/fuelingsdk">
- import { onMounted, reactive, ref, watch, onBeforeMount } from "vue";
- import eventBus from "/@/utils/mitt";
- import { ElMessage, ElTable } from 'element-plus'
- import { DispenserAuthCodeApi } from '/@/api/admin/deviceAuthorization/dispenserAuthCodeApi'
- import { FuelAuthCodeRecordDto } from '/@/api/admin/deviceAuthorization/dispenserAuthCodeDto'
- import Clipboard from 'clipboard'
- import type { pageInput } from "/@/api/admin/shareDto/shareDto";
- import { AuthApi } from '/@/api/admin/Auth'
- const multipleTableRef = ref<InstanceType<typeof ElTable>>()
- /**FTP申请页面对象 */
- const state = reactive({
- time: '',
- /**加载显示 */
- loading: false,
- /**条件查询模块 */
- filter: {
- /**油站名称 */
- station: '',
- /**申请日期*/
- applyDate: '',
- /**油机id */
- dispenserID: '',
- /**申请人*/
- name: '',
- /**授权码类型*/
- type: ''
- },
- /**分页标识 */
- pageInput: {
- CurrentPage: 1,
- PageSize: 10,
- } as pageInput,
- /**分页总数 */
- total: 0,
- /**表格信息 */
- tableModel: [] as FuelAuthCodeRecordDto,
- /**动态表头 */
- dynamicColumns: [
- { prop: 'applyDate', label: '申请日期' },
- { prop: 'station', label: '油站名称' },
- { prop: 'dispenserID', label: '油机id' },
- { prop: 'name', label: '申请人' },
- { prop: 'type', label: '授权类型' }
- ],
- /**授权码 */
- pwd: "",
- pwdDisplay: false,
- btnDisplay: true,
- msgDisplay: false
- })
- /**初始化 */
- const init = async () => {
- state.filter.applyDate = ''
- state.filter.station = ''
- state.filter.dispenserID = ''
- state.filter.name = ''
- state.filter.type = ''
- state.pwd = ''
- state.btnDisplay = true
- state.msgDisplay = false
- state.pwdDisplay = false
- const res: any = await new DispenserAuthCodeApi().getDispenserAuthCodeRecord({ ...state.pageInput, filter: state.filter }).catch(() => {
- state.loading = false
- })
- //console.log(res.data.list)
- state.total = res.data.total
- state.tableModel = res.data.list
- }
- onMounted(() => {
- init()
- eventBus.off('refreshView')
- eventBus.on('refreshView', async () => {
- init()
- })
- })
- onBeforeMount(() => {
- eventBus.off('refreshView')
- })
- /**
- * 监听时间变换
- watch(() => state.time, (newVal ) => {
- if(newVal.length === 0){
- return
- }
- state.filter.expirationTime = newVal?.[0].toString()
- })
- */
- /**复制FTP密码 */
- const onCopy = () => {
- const clipboard = new Clipboard('#copyBtn')
- clipboard.on('success', () => {
- ElMessage.success('复制成功')
- clipboard.destroy()
- })
- clipboard.on('error', () => {
- ElMessage.error('复制失败')
- clipboard.destroy()
- })
- }
- /**申请FTP密码 */
- const onQuery = async () => {
- if (state.filter.station == '' || state.filter.dispenserID == '') {
- ElMessage.error('请输入油站名称和油机id')
- } else {
- const res = await new DispenserAuthCodeApi().getDispenserAuthCode({ dispenserID: state.filter.dispenserID }).catch()
- if (res.data.result == true) {
- state.pwd = res.data.authcode
- state.msgDisplay = true
- state.pwdDisplay = true
- state.btnDisplay = false
- const date = new Date()
- let month = padZero(date.getMonth() + 1)
- let day = padZero(date.getDate())
- let hour = padZero(date.getHours())
- let minute = padZero(date.getMinutes())
- let second = padZero(date.getSeconds())
- state.filter.applyDate = date.getFullYear() + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
- const name: any = await new AuthApi().getUserProfile()
- state.filter.name = name.data.name
- var buf = state.filter.dispenserID;
- var funthousand, funhundred, fundecade, funbit, funcode;
- funthousand = (buf.charCodeAt(16 - 4) - 0x30 - 0x11) * 1000;
- funhundred = (buf.charCodeAt(16 - 3) - 0x30 - 0x11) * 100;
- fundecade = (buf.charCodeAt(16 - 2) - 0x30 - 0x11) * 10;
- funbit = (buf.charCodeAt(16 - 1) - 0x30 - 0x11) * 1;
- funcode = funthousand + funhundred + fundecade + funbit;
- /*
- const buf = Buffer.from(state.filter.dispenserID, 'ascii');
-
-
-
- ElMessage.error(buf[0].toString())
-
- for (let i = 0; i < 16; i++)
- {
- buf[i]= (buf[i] - 0x11);
- }
-
- ElMessage.error(buf.toString());
- //ElMessage.error(strb)
-
- var funthousand, funhundred, fundecade, funbit, funcode;
- funthousand = (buf[16 - 4] - 0x30) * 1000;
- funhundred = (buf[16 - 3] - 0x30) * 100;
- fundecade = (buf[16 - 2] - 0x30) * 10;
- funbit = (buf[16 - 1] - 0x30) * 1;
- funcode = funthousand + funhundred + fundecade + funbit;
-
- ElMessage.error(funcode.toString());
- */
- state.filter.type = funcode.toString();
- await new DispenserAuthCodeApi().InsertDispenserAuthCode(state.filter)
- const data: any = await new DispenserAuthCodeApi().getDispenserAuthCodeRecord({ ...state.pageInput, filter: state.filter }).catch(() => {
- state.loading = false
- })
- state.total = data.data.total
- state.tableModel = data.data.list
- }
- else {
- ElMessage.error(res.data.message)
- }
- }
- }
- /**将Filter对象成.的连接方式
- const flattenObject = (obj, parentKey = '') => {
- const result = {};
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- const newKey = parentKey ? `${parentKey}.${key}` : key;
- if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
- const flattened = flattenObject(obj[key], newKey);
- Object.assign(result, flattened);
- } else {
- result[newKey] = obj[key];
- }
- }
- }
- return result;
- }*/
- /**页条数变化*/
- const onSizeChange = () => {
- init()
- }
- /**页数变化*/
- const onCurrentChange = () => {
- init()
- }
- const padZero = (num: any) => {
- return num < 10 ? '0' + num : num
- }
- </script>
- <style scoped lang="scss">
- .my-el-link {
- font-size: 12px;
- }
- .el-form .el-col.mb20 {
- margin: 0 !important;
- }
- .el-input,
- .el-select {
- width: 240px;
- }
- /* 输入框标签固定四个字符宽度 */
- ::v-deep .el-form-item__label {
- // 字体大小14,4个字符,12px右间距
- width: 14*4px+12px;
- justify-content: start;
- }
- /* 数据表头 设置灰色样式 */
- ::v-deep .el-table th.el-table__cell {
- background-color: #F6F6F6;
- }
- </style>
|