Commit d68983e7e59048ea939e40f4a901791d29176adc

Authored by wuxw
1 parent 788477fb

保养功能开发完成

Showing 35 changed files with 3871 additions and 31 deletions
src/api/machine/accessControlInoutApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取门禁进出记录列表
  5 +export function listAccessControlInouts(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/iot.getOpenApi',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + const res = response.data
  16 + resolve({
  17 + data: res.data,
  18 + total: res.total
  19 + })
  20 + }).catch(error => {
  21 + reject(error)
  22 + })
  23 + })
  24 +}
  25 +
  26 +// 获取门禁设备列表
  27 +export function listAccessControls(params) {
  28 + return new Promise((resolve, reject) => {
  29 + request({
  30 + url: '/iot.getOpenApi',
  31 + method: 'get',
  32 + params: {
  33 + ...params,
  34 + communityId: getCommunityId()
  35 + }
  36 + }).then(response => {
  37 + const res = response.data
  38 + resolve({
  39 + data: res.data
  40 + })
  41 + }).catch(error => {
  42 + reject(error)
  43 + })
  44 + })
  45 +}
0 46 \ No newline at end of file
... ...
src/api/machine/machinePrinterManageApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取云打印机列表
  5 +export function listMachinePrinter(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/printer.listMachinePrinter',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + const res = response.data
  16 + resolve(res)
  17 + }).catch(error => {
  18 + reject(error)
  19 + })
  20 + })
  21 +}
  22 +
  23 +// 添加云打印机
  24 +export function saveMachinePrinter(data) {
  25 + return new Promise((resolve, reject) => {
  26 + request({
  27 + url: '/printer.saveMachinePrinter',
  28 + method: 'post',
  29 + data: {
  30 + ...data,
  31 + communityId: getCommunityId()
  32 + }
  33 + }).then(response => {
  34 + const res = response.data
  35 + resolve(res)
  36 + }).catch(error => {
  37 + reject(error)
  38 + })
  39 + })
  40 +}
  41 +
  42 +// 修改云打印机
  43 +export function updateMachinePrinter(data) {
  44 + return new Promise((resolve, reject) => {
  45 + request({
  46 + url: '/printer.updateMachinePrinter',
  47 + method: 'post',
  48 + data: {
  49 + ...data,
  50 + communityId: getCommunityId()
  51 + }
  52 + }).then(response => {
  53 + const res = response.data
  54 + resolve(res)
  55 + }).catch(error => {
  56 + reject(error)
  57 + })
  58 + })
  59 +}
  60 +
  61 +// 删除云打印机
  62 +export function deleteMachinePrinter(data) {
  63 + return new Promise((resolve, reject) => {
  64 + request({
  65 + url: '/printer.deleteMachinePrinter',
  66 + method: 'post',
  67 + data: {
  68 + ...data,
  69 + communityId: getCommunityId()
  70 + }
  71 + }).then(response => {
  72 + const res = response.data
  73 + resolve(res)
  74 + }).catch(error => {
  75 + reject(error)
  76 + })
  77 + })
  78 +}
0 79 \ No newline at end of file
... ...
src/api/machine/machineTranslateManageApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取机器翻译列表
  5 +export function listMachineTranslates(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/machineTranslate.listMachineTranslates',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + const res = response.data
  16 + resolve(res)
  17 + }).catch(error => {
  18 + reject(error)
  19 + })
  20 + })
  21 +}
  22 +
  23 +// 保存机器翻译
  24 +export function saveMachineTranslate(data) {
  25 + return new Promise((resolve, reject) => {
  26 + request({
  27 + url: '/machineTranslate.saveMachineTranslate',
  28 + method: 'post',
  29 + data: {
  30 + ...data,
  31 + communityId: getCommunityId()
  32 + }
  33 + }).then(response => {
  34 + const res = response.data
  35 + resolve(res)
  36 + }).catch(error => {
  37 + reject(error)
  38 + })
  39 + })
  40 +}
  41 +
  42 +// 重新发送物联网同步
  43 +export function resendIot(data) {
  44 + return new Promise((resolve, reject) => {
  45 + request({
  46 + url: '/machine/resendIot',
  47 + method: 'post',
  48 + data: {
  49 + ...data,
  50 + communityId: getCommunityId()
  51 + }
  52 + }).then(response => {
  53 + const res = response.data
  54 + resolve(res)
  55 + }).catch(error => {
  56 + reject(error)
  57 + })
  58 + })
  59 +}
0 60 \ No newline at end of file
... ...
src/api/machine/printerRuleApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取打印机规则列表
  5 +export function listPrinterRules(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/printer.listPrinterRule',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + resolve(response.data)
  16 + }).catch(error => {
  17 + reject(error)
  18 + })
  19 + })
  20 +}
  21 +
  22 +// 添加打印机规则
  23 +export function savePrinterRule(data) {
  24 + return new Promise((resolve, reject) => {
  25 + request({
  26 + url: '/printer.savePrinterRule',
  27 + method: 'post',
  28 + data: {
  29 + ...data,
  30 + communityId: getCommunityId()
  31 + }
  32 + }).then(response => {
  33 + resolve(response.data)
  34 + }).catch(error => {
  35 + reject(error)
  36 + })
  37 + })
  38 +}
  39 +
  40 +// 修改打印机规则
  41 +export function updatePrinterRule(data) {
  42 + return new Promise((resolve, reject) => {
  43 + request({
  44 + url: '/printer.updatePrinterRule',
  45 + method: 'post',
  46 + data: {
  47 + ...data,
  48 + communityId: getCommunityId()
  49 + }
  50 + }).then(response => {
  51 + resolve(response.data)
  52 + }).catch(error => {
  53 + reject(error)
  54 + })
  55 + })
  56 +}
  57 +
  58 +// 删除打印机规则
  59 +export function deletePrinterRule(data) {
  60 + return new Promise((resolve, reject) => {
  61 + request({
  62 + url: '/printer.deletePrinterRule',
  63 + method: 'post',
  64 + data: {
  65 + ...data,
  66 + communityId: getCommunityId()
  67 + }
  68 + }).then(response => {
  69 + resolve(response.data)
  70 + }).catch(error => {
  71 + reject(error)
  72 + })
  73 + })
  74 +}
  75 +
  76 +// 获取打印机规则关联的机器列表
  77 +export function listPrinterRuleMachines(params) {
  78 + return new Promise((resolve, reject) => {
  79 + request({
  80 + url: '/printer.listPrinterRuleMachine',
  81 + method: 'get',
  82 + params: {
  83 + ...params,
  84 + communityId: getCommunityId()
  85 + }
  86 + }).then(response => {
  87 + resolve(response.data)
  88 + }).catch(error => {
  89 + reject(error)
  90 + })
  91 + })
  92 +}
  93 +
  94 +// 添加打印机规则机器
  95 +export function savePrinterRuleMachine(data) {
  96 + return new Promise((resolve, reject) => {
  97 + request({
  98 + url: '/printer.savePrinterRuleMachine',
  99 + method: 'post',
  100 + data: {
  101 + ...data,
  102 + communityId: getCommunityId()
  103 + }
  104 + }).then(response => {
  105 + resolve(response.data)
  106 + }).catch(error => {
  107 + reject(error)
  108 + })
  109 + })
  110 +}
  111 +
  112 +// 修改打印机规则机器
  113 +export function updatePrinterRuleMachine(data) {
  114 + return new Promise((resolve, reject) => {
  115 + request({
  116 + url: '/printer.updatePrinterRuleMachine',
  117 + method: 'post',
  118 + data: {
  119 + ...data,
  120 + communityId: getCommunityId()
  121 + }
  122 + }).then(response => {
  123 + resolve(response.data)
  124 + }).catch(error => {
  125 + reject(error)
  126 + })
  127 + })
  128 +}
  129 +
  130 +// 删除打印机规则机器
  131 +export function deletePrinterRuleMachine(data) {
  132 + return new Promise((resolve, reject) => {
  133 + request({
  134 + url: '/printer.deletePrinterRuleMachine',
  135 + method: 'post',
  136 + data: {
  137 + ...data,
  138 + communityId: getCommunityId()
  139 + }
  140 + }).then(response => {
  141 + resolve(response.data)
  142 + }).catch(error => {
  143 + reject(error)
  144 + })
  145 + })
  146 +}
  147 +
  148 +// 获取打印机列表
  149 +export function listMachinePrinters(params) {
  150 + return new Promise((resolve, reject) => {
  151 + request({
  152 + url: '/printer.listMachinePrinter',
  153 + method: 'get',
  154 + params: {
  155 + ...params,
  156 + communityId: getCommunityId()
  157 + }
  158 + }).then(response => {
  159 + resolve(response.data)
  160 + }).catch(error => {
  161 + reject(error)
  162 + })
  163 + })
  164 +}
  165 +
  166 +// 获取打印机规则关联的费用列表
  167 +export function listPrinterRuleFees(params) {
  168 + return new Promise((resolve, reject) => {
  169 + request({
  170 + url: '/printer.listPrinterRuleFee',
  171 + method: 'get',
  172 + params: {
  173 + ...params,
  174 + communityId: getCommunityId()
  175 + }
  176 + }).then(response => {
  177 + resolve(response.data)
  178 + }).catch(error => {
  179 + reject(error)
  180 + })
  181 + })
  182 +}
  183 +
  184 +// 添加打印机规则费用
  185 +export function savePrinterRuleFee(data) {
  186 + return new Promise((resolve, reject) => {
  187 + request({
  188 + url: '/printer.savePrinterRuleFee',
  189 + method: 'post',
  190 + data: {
  191 + ...data,
  192 + communityId: getCommunityId()
  193 + }
  194 + }).then(response => {
  195 + resolve(response.data)
  196 + }).catch(error => {
  197 + reject(error)
  198 + })
  199 + })
  200 +}
  201 +
  202 +// 删除打印机规则费用
  203 +export function deletePrinterRuleFee(data) {
  204 + return new Promise((resolve, reject) => {
  205 + request({
  206 + url: '/printer.deletePrinterRuleFee',
  207 + method: 'post',
  208 + data: {
  209 + ...data,
  210 + communityId: getCommunityId()
  211 + }
  212 + }).then(response => {
  213 + resolve(response.data)
  214 + }).catch(error => {
  215 + reject(error)
  216 + })
  217 + })
  218 +}
  219 +
  220 +// 获取费用配置列表
  221 +export function listFeeConfigs(params) {
  222 + return new Promise((resolve, reject) => {
  223 + request({
  224 + url: '/feeConfig.listFeeConfigs',
  225 + method: 'get',
  226 + params: {
  227 + ...params,
  228 + communityId: getCommunityId()
  229 + }
  230 + }).then(response => {
  231 + resolve(response.data)
  232 + }).catch(error => {
  233 + reject(error)
  234 + })
  235 + })
  236 +}
  237 +
  238 +// 获取打印机规则关联的报修列表
  239 +export function listPrinterRuleRepairs(params) {
  240 + return new Promise((resolve, reject) => {
  241 + request({
  242 + url: '/printer.listPrinterRuleRepair',
  243 + method: 'get',
  244 + params: {
  245 + ...params,
  246 + communityId: getCommunityId()
  247 + }
  248 + }).then(response => {
  249 + resolve(response.data)
  250 + }).catch(error => {
  251 + reject(error)
  252 + })
  253 + })
  254 +}
  255 +
  256 +// 添加打印机规则报修
  257 +export function savePrinterRuleRepair(data) {
  258 + return new Promise((resolve, reject) => {
  259 + request({
  260 + url: '/printer.savePrinterRuleRepair',
  261 + method: 'post',
  262 + data: {
  263 + ...data,
  264 + communityId: getCommunityId()
  265 + }
  266 + }).then(response => {
  267 + resolve(response.data)
  268 + }).catch(error => {
  269 + reject(error)
  270 + })
  271 + })
  272 +}
  273 +
  274 +// 删除打印机规则报修
  275 +export function deletePrinterRuleRepair(data) {
  276 + return new Promise((resolve, reject) => {
  277 + request({
  278 + url: '/printer.deletePrinterRuleRepair',
  279 + method: 'post',
  280 + data: {
  281 + ...data,
  282 + communityId: getCommunityId()
  283 + }
  284 + }).then(response => {
  285 + resolve(response.data)
  286 + }).catch(error => {
  287 + reject(error)
  288 + })
  289 + })
  290 +}
  291 +
  292 +// 获取报修设置列表
  293 +export function listRepairSettings(params) {
  294 + return new Promise((resolve, reject) => {
  295 + request({
  296 + url: '/repair.listRepairSettings',
  297 + method: 'get',
  298 + params: {
  299 + ...params,
  300 + communityId: getCommunityId()
  301 + }
  302 + }).then(response => {
  303 + resolve(response.data)
  304 + }).catch(error => {
  305 + reject(error)
  306 + })
  307 + })
  308 +}
0 309 \ No newline at end of file
... ...
src/components/machine/addMachinePrinter.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('machinePrinterManage.add.title')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form
  9 + ref="form"
  10 + :model="form"
  11 + :rules="rules"
  12 + label-width="120px"
  13 + >
  14 + <el-form-item
  15 + :label="$t('machinePrinterManage.form.machineName')"
  16 + prop="machineName"
  17 + >
  18 + <el-input
  19 + v-model="form.machineName"
  20 + :placeholder="$t('machinePrinterManage.form.machineNamePlaceholder')"
  21 + />
  22 + </el-form-item>
  23 + <el-form-item
  24 + :label="$t('machinePrinterManage.form.machineCode')"
  25 + prop="machineCode"
  26 + >
  27 + <el-input
  28 + v-model="form.machineCode"
  29 + :placeholder="$t('machinePrinterManage.form.machineCodePlaceholder')"
  30 + />
  31 + </el-form-item>
  32 + <el-form-item
  33 + :label="$t('machinePrinterManage.form.implBean')"
  34 + prop="implBean"
  35 + >
  36 + <el-select
  37 + v-model="form.implBean"
  38 + :placeholder="$t('machinePrinterManage.form.implBeanPlaceholder')"
  39 + style="width: 100%"
  40 + >
  41 + <el-option
  42 + v-for="item in implBeans"
  43 + :key="item.statusCd"
  44 + :label="item.name"
  45 + :value="item.statusCd"
  46 + />
  47 + </el-select>
  48 + </el-form-item>
  49 + </el-form>
  50 + <span slot="footer" class="dialog-footer">
  51 + <el-button @click="visible = false">
  52 + {{ $t('common.cancel') }}
  53 + </el-button>
  54 + <el-button type="primary" @click="handleSubmit">
  55 + {{ $t('common.confirm') }}
  56 + </el-button>
  57 + </span>
  58 + </el-dialog>
  59 +</template>
  60 +
  61 +<script>
  62 +import { saveMachinePrinter } from '@/api/machine/machinePrinterManageApi'
  63 +import { getCommunityId } from '@/api/community/communityApi'
  64 +import { getDict } from '@/api/community/communityApi'
  65 +
  66 +export default {
  67 + name: 'AddMachinePrinter',
  68 + data() {
  69 + return {
  70 + visible: false,
  71 + form: {
  72 + machineName: '',
  73 + machineCode: '',
  74 + implBean: '',
  75 + communityId: getCommunityId()
  76 + },
  77 + implBeans: [],
  78 + rules: {
  79 + machineName: [
  80 + { required: true, message: this.$t('machinePrinterManage.validate.machineNameRequired'), trigger: 'blur' },
  81 + { max: 200, message: this.$t('machinePrinterManage.validate.machineNameMaxLength'), trigger: 'blur' }
  82 + ],
  83 + machineCode: [
  84 + { required: true, message: this.$t('machinePrinterManage.validate.machineCodeRequired'), trigger: 'blur' },
  85 + { max: 30, message: this.$t('machinePrinterManage.validate.machineCodeMaxLength'), trigger: 'blur' }
  86 + ],
  87 + implBean: [
  88 + { required: true, message: this.$t('machinePrinterManage.validate.implBeanRequired'), trigger: 'change' },
  89 + { max: 30, message: this.$t('machinePrinterManage.validate.implBeanMaxLength'), trigger: 'blur' }
  90 + ]
  91 + }
  92 + }
  93 + },
  94 + methods: {
  95 + open() {
  96 + this.visible = true
  97 + this.getDictData()
  98 + },
  99 + async getDictData() {
  100 + try {
  101 + const data = await getDict('machine_printer', 'impl_bean')
  102 + this.implBeans = data
  103 + } catch (error) {
  104 + console.error('获取字典数据失败:', error)
  105 + }
  106 + },
  107 + handleClose() {
  108 + this.$refs.form.resetFields()
  109 + },
  110 + handleSubmit() {
  111 + this.$refs.form.validate(async valid => {
  112 + if (valid) {
  113 + try {
  114 + await saveMachinePrinter(this.form)
  115 + this.$message.success(this.$t('machinePrinterManage.message.addSuccess'))
  116 + this.visible = false
  117 + this.$emit('success')
  118 + } catch (error) {
  119 + console.error('添加失败:', error)
  120 + }
  121 + }
  122 + })
  123 + }
  124 + }
  125 +}
  126 +</script>
0 127 \ No newline at end of file
... ...
src/components/machine/addMachineTranslate.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('machineTranslateManage.add.title')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
  9 + <el-form-item :label="$t('machineTranslateManage.add.machineCode')" prop="machineCode">
  10 + <el-input
  11 + v-model="formData.machineCode"
  12 + :placeholder="$t('machineTranslateManage.add.machineCodePlaceholder')"
  13 + />
  14 + </el-form-item>
  15 + <el-form-item :label="$t('machineTranslateManage.add.machineId')" prop="machineId">
  16 + <el-input
  17 + v-model="formData.machineId"
  18 + :placeholder="$t('machineTranslateManage.add.machineIdPlaceholder')"
  19 + />
  20 + </el-form-item>
  21 + <el-form-item :label="$t('machineTranslateManage.add.typeCd')" prop="typeCd">
  22 + <el-select
  23 + v-model="formData.typeCd"
  24 + :placeholder="$t('machineTranslateManage.add.typeCdPlaceholder')"
  25 + style="width: 100%"
  26 + >
  27 + <el-option
  28 + v-for="item in typeOptions"
  29 + :key="item.value"
  30 + :label="item.label"
  31 + :value="item.value"
  32 + />
  33 + </el-select>
  34 + </el-form-item>
  35 + <el-form-item :label="$t('machineTranslateManage.add.objName')" prop="objName">
  36 + <el-input
  37 + v-model="formData.objName"
  38 + :placeholder="$t('machineTranslateManage.add.objNamePlaceholder')"
  39 + />
  40 + </el-form-item>
  41 + <el-form-item :label="$t('machineTranslateManage.add.objId')" prop="objId">
  42 + <el-input
  43 + v-model="formData.objId"
  44 + :placeholder="$t('machineTranslateManage.add.objIdPlaceholder')"
  45 + />
  46 + </el-form-item>
  47 + <el-form-item :label="$t('machineTranslateManage.add.state')" prop="state">
  48 + <el-select
  49 + v-model="formData.state"
  50 + :placeholder="$t('machineTranslateManage.add.statePlaceholder')"
  51 + style="width: 100%"
  52 + >
  53 + <el-option
  54 + :label="$t('machineTranslateManage.state.notSync')"
  55 + value="10000"
  56 + />
  57 + <el-option
  58 + :label="$t('machineTranslateManage.state.synced')"
  59 + value="20000"
  60 + />
  61 + </el-select>
  62 + </el-form-item>
  63 + </el-form>
  64 + <span slot="footer" class="dialog-footer">
  65 + <el-button @click="visible = false">
  66 + {{ $t('common.cancel') }}
  67 + </el-button>
  68 + <el-button type="primary" @click="handleSubmit">
  69 + {{ $t('common.confirm') }}
  70 + </el-button>
  71 + </span>
  72 + </el-dialog>
  73 +</template>
  74 +
  75 +<script>
  76 +import { saveMachineTranslate } from '@/api/machine/machineTranslateManageApi'
  77 +import { getCommunityId } from '@/api/community/communityApi'
  78 +
  79 +export default {
  80 + name: 'AddMachineTranslate',
  81 + data() {
  82 + return {
  83 + visible: false,
  84 + formData: {
  85 + machineCode: '',
  86 + machineId: '',
  87 + typeCd: '',
  88 + objName: '',
  89 + objId: '',
  90 + state: '',
  91 + communityId: ''
  92 + },
  93 + typeOptions: [
  94 + { value: '8899', label: this.$t('machineTranslateManage.type.owner') },
  95 + { value: '9988', label: this.$t('machineTranslateManage.type.community') }
  96 + ],
  97 + rules: {
  98 + machineCode: [
  99 + { required: true, message: this.$t('machineTranslateManage.validate.machineCodeRequired'), trigger: 'blur' },
  100 + { max: 30, message: this.$t('machineTranslateManage.validate.machineCodeMaxLength'), trigger: 'blur' }
  101 + ],
  102 + machineId: [
  103 + { required: true, message: this.$t('machineTranslateManage.validate.machineIdRequired'), trigger: 'blur' }
  104 + ],
  105 + typeCd: [
  106 + { required: true, message: this.$t('machineTranslateManage.validate.typeCdRequired'), trigger: 'change' }
  107 + ],
  108 + objName: [
  109 + { required: true, message: this.$t('machineTranslateManage.validate.objNameRequired'), trigger: 'blur' }
  110 + ],
  111 + objId: [
  112 + { required: true, message: this.$t('machineTranslateManage.validate.objIdRequired'), trigger: 'blur' },
  113 + { pattern: /^\d+$/, message: this.$t('machineTranslateManage.validate.objIdNumber'), trigger: 'blur' }
  114 + ],
  115 + state: [
  116 + { required: true, message: this.$t('machineTranslateManage.validate.stateRequired'), trigger: 'change' }
  117 + ]
  118 + }
  119 + }
  120 + },
  121 + methods: {
  122 + open() {
  123 + this.visible = true
  124 + this.formData.communityId = getCommunityId()
  125 + },
  126 + handleClose() {
  127 + this.$refs.form.resetFields()
  128 + },
  129 + handleSubmit() {
  130 + this.$refs.form.validate(async valid => {
  131 + if (valid) {
  132 + try {
  133 + await saveMachineTranslate(this.formData)
  134 + this.$message.success(this.$t('machineTranslateManage.message.addSuccess'))
  135 + this.visible = false
  136 + this.$emit('success')
  137 + } catch (error) {
  138 + console.error('保存失败:', error)
  139 + }
  140 + }
  141 + })
  142 + }
  143 + }
  144 +}
  145 +</script>
0 146 \ No newline at end of file
... ...
src/components/machine/addPrinterRule.vue 0 → 100644
  1 +<template>
  2 + <el-dialog :title="$t('printerRule.addTitle')" :visible.sync="visible" width="50%" @close="handleClose">
  3 + <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  4 + <el-form-item :label="$t('printerRule.ruleName')" prop="ruleName">
  5 + <el-input v-model="form.ruleName" :placeholder="$t('printerRule.ruleNamePlaceholder')"></el-input>
  6 + </el-form-item>
  7 + <el-form-item :label="$t('printerRule.remark')" prop="remark">
  8 + <el-input type="textarea" v-model="form.remark" :placeholder="$t('printerRule.remarkPlaceholder')"></el-input>
  9 + </el-form-item>
  10 + <el-form-item :label="$t('printerRule.state')" prop="state">
  11 + <el-select v-model="form.state" style="width:100%">
  12 + <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
  13 + </el-select>
  14 + </el-form-item>
  15 + </el-form>
  16 +
  17 + <span slot="footer" class="dialog-footer">
  18 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  19 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  20 + </span>
  21 + </el-dialog>
  22 +</template>
  23 +
  24 +<script>
  25 +import { savePrinterRule } from '@/api/machine/printerRuleApi'
  26 +import { getCommunityId } from '@/api/community/communityApi'
  27 +import { getDict } from '@/api/community/communityApi'
  28 +
  29 +export default {
  30 + name: 'AddPrinterRule',
  31 + data() {
  32 + return {
  33 + visible: false,
  34 + form: {
  35 + ruleName: '',
  36 + remark: '',
  37 + state: '1001',
  38 + communityId: ''
  39 + },
  40 + rules: {
  41 + ruleName: [
  42 + { required: true, message: this.$t('printerRule.ruleNameRequired'), trigger: 'blur' },
  43 + { max: 64, message: this.$t('printerRule.ruleNameMaxLength'), trigger: 'blur' }
  44 + ],
  45 + remark: [
  46 + { max: 512, message: this.$t('printerRule.remarkMaxLength'), trigger: 'blur' }
  47 + ]
  48 + },
  49 + stateOptions: []
  50 + }
  51 + },
  52 + created() {
  53 + this.form.communityId = getCommunityId()
  54 + this.getStateOptions()
  55 + },
  56 + methods: {
  57 + async getStateOptions() {
  58 + try {
  59 + const data = await getDict('printer_rule', 'state')
  60 + this.stateOptions = data
  61 + } catch (error) {
  62 + console.error('获取状态字典失败:', error)
  63 + }
  64 + },
  65 + open() {
  66 + this.visible = true
  67 + this.resetForm()
  68 + },
  69 + handleClose() {
  70 + this.resetForm()
  71 + },
  72 + resetForm() {
  73 + this.$refs.form && this.$refs.form.resetFields()
  74 + this.form = {
  75 + ruleName: '',
  76 + remark: '',
  77 + state: '1001',
  78 + communityId: getCommunityId()
  79 + }
  80 + },
  81 + handleSubmit() {
  82 + this.$refs.form.validate(async valid => {
  83 + if (valid) {
  84 + try {
  85 + await savePrinterRule(this.form)
  86 + this.$message.success(this.$t('common.addSuccess'))
  87 + this.visible = false
  88 + this.$emit('success')
  89 + } catch (error) {
  90 + console.error('添加打印机规则失败:', error)
  91 + }
  92 + }
  93 + })
  94 + }
  95 + }
  96 +}
  97 +</script>
0 98 \ No newline at end of file
... ...
src/components/machine/addPrinterRuleFee.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleFees.addTitle')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form
  9 + ref="form"
  10 + :model="form"
  11 + :rules="rules"
  12 + label-width="120px"
  13 + >
  14 + <el-form-item
  15 + :label="$t('printerRuleFees.fee')"
  16 + prop="feeId"
  17 + >
  18 + <el-select
  19 + v-model="form.feeId"
  20 + :placeholder="$t('printerRuleFees.feePlaceholder')"
  21 + style="width:100%"
  22 + >
  23 + <el-option
  24 + v-for="item in feeConfigs"
  25 + :key="item.configId"
  26 + :label="item.feeName"
  27 + :value="item.configId"
  28 + />
  29 + </el-select>
  30 + </el-form-item>
  31 + </el-form>
  32 +
  33 + <span slot="footer" class="dialog-footer">
  34 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  35 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  36 + </span>
  37 + </el-dialog>
  38 +</template>
  39 +
  40 +<script>
  41 +import { savePrinterRuleFee, listFeeConfigs } from '@/api/machine/printerRuleApi'
  42 +import { getCommunityId } from '@/api/community/communityApi'
  43 +
  44 +export default {
  45 + name: 'AddPrinterRuleFee',
  46 + props: {
  47 + ruleId: {
  48 + type: String,
  49 + required: true
  50 + }
  51 + },
  52 + data() {
  53 + return {
  54 + visible: false,
  55 + form: {
  56 + feeId: '',
  57 + ruleId: '',
  58 + communityId: ''
  59 + },
  60 + feeConfigs: [],
  61 + rules: {
  62 + feeId: [
  63 + { required: true, message: this.$t('printerRuleFees.feeRequired'), trigger: 'change' }
  64 + ]
  65 + }
  66 + }
  67 + },
  68 + created() {
  69 + this.form.communityId = getCommunityId()
  70 + this.getFeeConfigs()
  71 + },
  72 + methods: {
  73 + open() {
  74 + this.visible = true
  75 + this.form.ruleId = this.ruleId
  76 + },
  77 + handleClose() {
  78 + this.$refs.form.resetFields()
  79 + },
  80 + async getFeeConfigs() {
  81 + try {
  82 + const params = {
  83 + page: 1,
  84 + row: 100,
  85 + communityId: this.form.communityId
  86 + }
  87 + const { feeConfigs } = await listFeeConfigs(params)
  88 + this.feeConfigs = feeConfigs
  89 + } catch (error) {
  90 + console.error('获取费用配置列表失败:', error)
  91 + }
  92 + },
  93 + async handleSubmit() {
  94 + this.$refs.form.validate(async valid => {
  95 + if (valid) {
  96 + try {
  97 + await savePrinterRuleFee(this.form)
  98 + this.$message.success(this.$t('common.addSuccess'))
  99 + this.visible = false
  100 + this.$emit('success')
  101 + } catch (error) {
  102 + console.error('添加缴费自动打印失败:', error)
  103 + }
  104 + }
  105 + })
  106 + }
  107 + }
  108 +}
  109 +</script>
0 110 \ No newline at end of file
... ...
src/components/machine/addPrinterRuleMachine.vue 0 → 100644
  1 +<template>
  2 + <el-dialog :title="$t('printerRuleMachine.addTitle')" :visible.sync="visible" width="50%" @close="handleClose">
  3 + <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  4 + <el-form-item :label="$t('printerRuleMachine.machine')" prop="machineId">
  5 + <el-select v-model="form.machineId" :placeholder="$t('printerRuleMachine.machinePlaceholder')" style="width:100%">
  6 + <el-option v-for="item in machines" :key="item.machineId" :label="`${item.machineName}(${item.machineCode})`"
  7 + :value="item.machineId" />
  8 + </el-select>
  9 + </el-form-item>
  10 + <el-form-item :label="$t('printerRuleMachine.quantity')" prop="quantity">
  11 + <el-input-number v-model="form.quantity" :min="1" :max="100"
  12 + :placeholder="$t('printerRuleMachine.quantityPlaceholder')" />
  13 + </el-form-item>
  14 + </el-form>
  15 +
  16 + <span slot="footer" class="dialog-footer">
  17 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  18 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  19 + </span>
  20 + </el-dialog>
  21 +</template>
  22 +
  23 +<script>
  24 +import { savePrinterRuleMachine, listMachinePrinters } from '@/api/machine/printerRuleApi'
  25 +import { getCommunityId } from '@/api/community/communityApi'
  26 +
  27 +export default {
  28 + name: 'AddPrinterRuleMachine',
  29 + data() {
  30 + return {
  31 + visible: false,
  32 + form: {
  33 + machineId: '',
  34 + quantity: 1,
  35 + ruleId: '',
  36 + communityId: ''
  37 + },
  38 + machines: [],
  39 + rules: {
  40 + machineId: [
  41 + { required: true, message: this.$t('printerRuleMachine.machineRequired'), trigger: 'change' }
  42 + ],
  43 + quantity: [
  44 + { required: true, message: this.$t('printerRuleMachine.quantityRequired'), trigger: 'blur' }
  45 + ]
  46 + }
  47 + }
  48 + },
  49 + created() {
  50 + this.form.communityId = getCommunityId()
  51 + this.getMachines()
  52 + },
  53 + methods: {
  54 + open(ruleId) {
  55 + this.visible = true
  56 + this.form.ruleId = ruleId
  57 + },
  58 + handleClose() {
  59 + this.$refs.form.resetFields()
  60 + this.form.quantity = 1
  61 + },
  62 + async getMachines() {
  63 + try {
  64 + const params = {
  65 + page: 1,
  66 + row: 100,
  67 + communityId: this.form.communityId
  68 + }
  69 + const { data } = await listMachinePrinters(params)
  70 + this.machines = data
  71 + } catch (error) {
  72 + console.error('获取打印机列表失败:', error)
  73 + }
  74 + },
  75 + async handleSubmit() {
  76 + this.$refs.form.validate(async valid => {
  77 + if (valid) {
  78 + try {
  79 + await savePrinterRuleMachine(this.form)
  80 + this.$message.success(this.$t('common.addSuccess'))
  81 + this.visible = false
  82 + this.$emit('success')
  83 + } catch (error) {
  84 + console.error('添加打印机规则机器失败:', error)
  85 + }
  86 + }
  87 + })
  88 + }
  89 + }
  90 +}
  91 +</script>
0 92 \ No newline at end of file
... ...
src/components/machine/addPrinterRuleRepair.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleRepair.addTitle')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form
  9 + ref="form"
  10 + :model="form"
  11 + :rules="rules"
  12 + label-width="120px"
  13 + >
  14 + <el-form-item
  15 + :label="$t('printerRuleRepair.repairType')"
  16 + prop="repairType"
  17 + >
  18 + <el-select
  19 + v-model="form.repairType"
  20 + :placeholder="$t('printerRuleRepair.repairTypePlaceholder')"
  21 + style="width:100%"
  22 + >
  23 + <el-option
  24 + v-for="item in repairSettings"
  25 + :key="item.repairType"
  26 + :label="item.repairTypeName"
  27 + :value="item.repairType"
  28 + />
  29 + </el-select>
  30 + </el-form-item>
  31 + </el-form>
  32 +
  33 + <span slot="footer" class="dialog-footer">
  34 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  35 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  36 + </span>
  37 + </el-dialog>
  38 +</template>
  39 +
  40 +<script>
  41 +import { savePrinterRuleRepair, listRepairSettings } from '@/api/machine/printerRuleApi'
  42 +import { getCommunityId } from '@/api/community/communityApi'
  43 +
  44 +export default {
  45 + name: 'AddPrinterRuleRepair',
  46 + props: {
  47 + ruleId: {
  48 + type: String,
  49 + required: true
  50 + }
  51 + },
  52 + data() {
  53 + return {
  54 + visible: false,
  55 + form: {
  56 + repairType: '',
  57 + ruleId: '',
  58 + communityId: ''
  59 + },
  60 + repairSettings: [],
  61 + rules: {
  62 + repairType: [
  63 + { required: true, message: this.$t('printerRuleRepair.repairTypeRequired'), trigger: 'change' }
  64 + ]
  65 + }
  66 + }
  67 + },
  68 + created() {
  69 + this.form.communityId = getCommunityId()
  70 + this.getRepairSettings()
  71 + },
  72 + methods: {
  73 + open() {
  74 + this.visible = true
  75 + this.form.ruleId = this.ruleId
  76 + },
  77 + handleClose() {
  78 + this.$refs.form.resetFields()
  79 + },
  80 + async getRepairSettings() {
  81 + try {
  82 + const params = {
  83 + page: 1,
  84 + row: 100,
  85 + communityId: this.form.communityId
  86 + }
  87 + const { data } = await listRepairSettings(params)
  88 + this.repairSettings = data
  89 + } catch (error) {
  90 + console.error('获取报修设置列表失败:', error)
  91 + }
  92 + },
  93 + async handleSubmit() {
  94 + this.$refs.form.validate(async valid => {
  95 + if (valid) {
  96 + try {
  97 + await savePrinterRuleRepair(this.form)
  98 + this.$message.success(this.$t('common.addSuccess'))
  99 + this.visible = false
  100 + this.$emit('success')
  101 + } catch (error) {
  102 + console.error('添加报修自动打印失败:', error)
  103 + }
  104 + }
  105 + })
  106 + }
  107 + }
  108 +}
  109 +</script>
0 110 \ No newline at end of file
... ...
src/components/machine/deleteMachinePrinter.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('machinePrinterManage.delete.title')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + @close="handleClose"
  7 + >
  8 + <div class="delete-content">
  9 + <p>{{ $t('machinePrinterManage.delete.confirmText') }}</p>
  10 + </div>
  11 + <span slot="footer" class="dialog-footer">
  12 + <el-button @click="visible = false">
  13 + {{ $t('common.cancel') }}
  14 + </el-button>
  15 + <el-button type="primary" @click="handleConfirm">
  16 + {{ $t('common.confirm') }}
  17 + </el-button>
  18 + </span>
  19 + </el-dialog>
  20 +</template>
  21 +
  22 +<script>
  23 +import { deleteMachinePrinter } from '@/api/machine/machinePrinterManageApi'
  24 +import { getCommunityId } from '@/api/community/communityApi'
  25 +
  26 +export default {
  27 + name: 'DeleteMachinePrinter',
  28 + data() {
  29 + return {
  30 + visible: false,
  31 + form: {
  32 + machineId: '',
  33 + communityId: getCommunityId()
  34 + }
  35 + }
  36 + },
  37 + methods: {
  38 + open(row) {
  39 + this.form.machineId = row.machineId
  40 + this.visible = true
  41 + },
  42 + handleClose() {
  43 + this.form.machineId = ''
  44 + },
  45 + async handleConfirm() {
  46 + try {
  47 + await deleteMachinePrinter(this.form)
  48 + this.$message.success(this.$t('machinePrinterManage.message.deleteSuccess'))
  49 + this.visible = false
  50 + this.$emit('success')
  51 + } catch (error) {
  52 + console.error('删除失败:', error)
  53 + }
  54 + }
  55 + }
  56 +}
  57 +</script>
  58 +
  59 +<style scoped>
  60 +.delete-content {
  61 + text-align: center;
  62 + font-size: 16px;
  63 + padding: 20px 0;
  64 +}
  65 +</style>
0 66 \ No newline at end of file
... ...
src/components/machine/deletePrinterRule.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRule.deleteTitle')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + center
  7 + >
  8 + <div class="text-center">
  9 + <p>{{ $t('printerRule.deleteConfirm') }}</p>
  10 + <p class="delete-item">{{ form.ruleName }}</p>
  11 + </div>
  12 + <span slot="footer" class="dialog-footer">
  13 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  14 + <el-button type="danger" @click="handleDelete">{{ $t('common.confirmDelete') }}</el-button>
  15 + </span>
  16 + </el-dialog>
  17 +</template>
  18 +
  19 +<script>
  20 +import { deletePrinterRule } from '@/api/machine/printerRuleApi'
  21 +import { getCommunityId } from '@/api/community/communityApi'
  22 +
  23 +export default {
  24 + name: 'DeletePrinterRule',
  25 + data() {
  26 + return {
  27 + visible: false,
  28 + form: {
  29 + ruleId: '',
  30 + ruleName: '',
  31 + communityId: ''
  32 + }
  33 + }
  34 + },
  35 + created() {
  36 + this.form.communityId = getCommunityId()
  37 + },
  38 + methods: {
  39 + open(data) {
  40 + this.visible = true
  41 + this.form = {
  42 + ruleId: data.ruleId,
  43 + ruleName: data.ruleName,
  44 + communityId: getCommunityId()
  45 + }
  46 + },
  47 + async handleDelete() {
  48 + try {
  49 + await deletePrinterRule(this.form)
  50 + this.$message.success(this.$t('common.deleteSuccess'))
  51 + this.visible = false
  52 + this.$emit('success')
  53 + } catch (error) {
  54 + console.error('删除打印机规则失败:', error)
  55 + }
  56 + }
  57 + }
  58 +}
  59 +</script>
  60 +
  61 +<style scoped>
  62 +.text-center {
  63 + text-align: center;
  64 +}
  65 +.delete-item {
  66 + font-weight: bold;
  67 + margin: 10px 0;
  68 + color: #f56c6c;
  69 +}
  70 +</style>
0 71 \ No newline at end of file
... ...
src/components/machine/deletePrinterRuleFee.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleFees.deleteTitle')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + center
  7 + >
  8 + <div class="text-center">
  9 + <p>{{ $t('printerRuleFees.deleteConfirm') }}</p>
  10 + <p class="delete-item">{{ form.feeConfigName }}</p>
  11 + </div>
  12 + <span slot="footer" class="dialog-footer">
  13 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  14 + <el-button type="danger" @click="handleDelete">{{ $t('common.confirmDelete') }}</el-button>
  15 + </span>
  16 + </el-dialog>
  17 +</template>
  18 +
  19 +<script>
  20 +import { deletePrinterRuleFee } from '@/api/machine/printerRuleApi'
  21 +import { getCommunityId } from '@/api/community/communityApi'
  22 +
  23 +export default {
  24 + name: 'DeletePrinterRuleFee',
  25 + data() {
  26 + return {
  27 + visible: false,
  28 + form: {
  29 + prfId: '',
  30 + feeConfigName: '',
  31 + communityId: ''
  32 + }
  33 + }
  34 + },
  35 + created() {
  36 + this.form.communityId = getCommunityId()
  37 + },
  38 + methods: {
  39 + open(row) {
  40 + this.visible = true
  41 + this.form = {
  42 + prfId: row.prfId,
  43 + feeConfigName: row.feeConfigName,
  44 + communityId: getCommunityId()
  45 + }
  46 + },
  47 + async handleDelete() {
  48 + try {
  49 + await deletePrinterRuleFee({
  50 + prfId: this.form.prfId,
  51 + communityId: this.form.communityId
  52 + })
  53 + this.$message.success(this.$t('common.deleteSuccess'))
  54 + this.visible = false
  55 + this.$emit('success')
  56 + } catch (error) {
  57 + console.error('删除缴费自动打印失败:', error)
  58 + }
  59 + }
  60 + }
  61 +}
  62 +</script>
  63 +
  64 +<style scoped>
  65 +.text-center {
  66 + text-align: center;
  67 +}
  68 +.delete-item {
  69 + font-weight: bold;
  70 + margin: 10px 0;
  71 + color: #f56c6c;
  72 +}
  73 +</style>
0 74 \ No newline at end of file
... ...
src/components/machine/deletePrinterRuleMachine.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleMachine.deleteTitle')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + center
  7 + >
  8 + <div class="text-center">
  9 + <p>{{ $t('printerRuleMachine.deleteConfirm') }}</p>
  10 + <p class="delete-item">{{ form.machineName }}</p>
  11 + <p>{{ $t('printerRuleMachine.quantity') }}: {{ form.quantity }}</p>
  12 + </div>
  13 + <span slot="footer" class="dialog-footer">
  14 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  15 + <el-button type="danger" @click="handleDelete">{{ $t('common.confirmDelete') }}</el-button>
  16 + </span>
  17 + </el-dialog>
  18 +</template>
  19 +
  20 +<script>
  21 +import { deletePrinterRuleMachine } from '@/api/machine/printerRuleApi'
  22 +import { getCommunityId } from '@/api/community/communityApi'
  23 +
  24 +export default {
  25 + name: 'DeletePrinterRuleMachine',
  26 + data() {
  27 + return {
  28 + visible: false,
  29 + form: {
  30 + prmId: '',
  31 + machineName: '',
  32 + quantity: 0,
  33 + communityId: ''
  34 + }
  35 + }
  36 + },
  37 + created() {
  38 + this.form.communityId = getCommunityId()
  39 + },
  40 + methods: {
  41 + open(row) {
  42 + this.visible = true
  43 + this.form = {
  44 + prmId: row.prmId,
  45 + machineName: row.machineName,
  46 + quantity: row.quantity,
  47 + communityId: getCommunityId()
  48 + }
  49 + },
  50 + async handleDelete() {
  51 + try {
  52 + await deletePrinterRuleMachine({
  53 + prmId: this.form.prmId,
  54 + communityId: this.form.communityId
  55 + })
  56 + this.$message.success(this.$t('common.deleteSuccess'))
  57 + this.visible = false
  58 + this.$emit('success')
  59 + } catch (error) {
  60 + console.error('删除打印机规则机器失败:', error)
  61 + }
  62 + }
  63 + }
  64 +}
  65 +</script>
  66 +
  67 +<style scoped>
  68 +.text-center {
  69 + text-align: center;
  70 +}
  71 +.delete-item {
  72 + font-weight: bold;
  73 + margin: 10px 0;
  74 + color: #f56c6c;
  75 +}
  76 +</style>
0 77 \ No newline at end of file
... ...
src/components/machine/deletePrinterRuleRepair.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleRepair.deleteTitle')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + center
  7 + >
  8 + <div class="text-center">
  9 + <p>{{ $t('printerRuleRepair.deleteConfirm') }}</p>
  10 + <p class="delete-item">{{ form.repairTypeName }}</p>
  11 + </div>
  12 + <span slot="footer" class="dialog-footer">
  13 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  14 + <el-button type="danger" @click="handleDelete">{{ $t('common.confirmDelete') }}</el-button>
  15 + </span>
  16 + </el-dialog>
  17 +</template>
  18 +
  19 +<script>
  20 +import { deletePrinterRuleRepair } from '@/api/machine/printerRuleApi'
  21 +import { getCommunityId } from '@/api/community/communityApi'
  22 +
  23 +export default {
  24 + name: 'DeletePrinterRuleRepair',
  25 + data() {
  26 + return {
  27 + visible: false,
  28 + form: {
  29 + prrId: '',
  30 + repairTypeName: '',
  31 + communityId: ''
  32 + }
  33 + }
  34 + },
  35 + created() {
  36 + this.form.communityId = getCommunityId()
  37 + },
  38 + methods: {
  39 + open(row) {
  40 + this.visible = true
  41 + this.form = {
  42 + prrId: row.prrId,
  43 + repairTypeName: row.repairTypeName,
  44 + communityId: getCommunityId()
  45 + }
  46 + },
  47 + async handleDelete() {
  48 + try {
  49 + await deletePrinterRuleRepair({
  50 + prrId: this.form.prrId,
  51 + communityId: this.form.communityId
  52 + })
  53 + this.$message.success(this.$t('common.deleteSuccess'))
  54 + this.visible = false
  55 + this.$emit('success')
  56 + } catch (error) {
  57 + console.error('删除报修自动打印失败:', error)
  58 + }
  59 + }
  60 + }
  61 +}
  62 +</script>
  63 +
  64 +<style scoped>
  65 +.text-center {
  66 + text-align: center;
  67 +}
  68 +.delete-item {
  69 + font-weight: bold;
  70 + margin: 10px 0;
  71 + color: #f56c6c;
  72 +}
  73 +</style>
0 74 \ No newline at end of file
... ...
src/components/machine/editMachinePrinter.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('machinePrinterManage.edit.title')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form
  9 + ref="form"
  10 + :model="form"
  11 + :rules="rules"
  12 + label-width="120px"
  13 + >
  14 + <el-form-item
  15 + :label="$t('machinePrinterManage.form.machineName')"
  16 + prop="machineName"
  17 + >
  18 + <el-input
  19 + v-model="form.machineName"
  20 + :placeholder="$t('machinePrinterManage.form.machineNamePlaceholder')"
  21 + />
  22 + </el-form-item>
  23 + <el-form-item
  24 + :label="$t('machinePrinterManage.form.machineCode')"
  25 + prop="machineCode"
  26 + >
  27 + <el-input
  28 + v-model="form.machineCode"
  29 + :placeholder="$t('machinePrinterManage.form.machineCodePlaceholder')"
  30 + />
  31 + </el-form-item>
  32 + <el-form-item
  33 + :label="$t('machinePrinterManage.form.implBean')"
  34 + prop="implBean"
  35 + >
  36 + <el-select
  37 + v-model="form.implBean"
  38 + :placeholder="$t('machinePrinterManage.form.implBeanPlaceholder')"
  39 + style="width: 100%"
  40 + >
  41 + <el-option
  42 + v-for="item in implBeans"
  43 + :key="item.statusCd"
  44 + :label="item.name"
  45 + :value="item.statusCd"
  46 + />
  47 + </el-select>
  48 + </el-form-item>
  49 + </el-form>
  50 + <span slot="footer" class="dialog-footer">
  51 + <el-button @click="visible = false">
  52 + {{ $t('common.cancel') }}
  53 + </el-button>
  54 + <el-button type="primary" @click="handleSubmit">
  55 + {{ $t('common.confirm') }}
  56 + </el-button>
  57 + </span>
  58 + </el-dialog>
  59 +</template>
  60 +
  61 +<script>
  62 +import { updateMachinePrinter } from '@/api/machine/machinePrinterManageApi'
  63 +import { getCommunityId } from '@/api/community/communityApi'
  64 +import { getDict } from '@/api/community/communityApi'
  65 +
  66 +export default {
  67 + name: 'EditMachinePrinter',
  68 + data() {
  69 + return {
  70 + visible: false,
  71 + form: {
  72 + machineId: '',
  73 + machineName: '',
  74 + machineCode: '',
  75 + implBean: '',
  76 + communityId: getCommunityId()
  77 + },
  78 + implBeans: [],
  79 + rules: {
  80 + machineId: [
  81 + { required: true, message: this.$t('machinePrinterManage.validate.machineIdRequired'), trigger: 'blur' }
  82 + ],
  83 + machineName: [
  84 + { required: true, message: this.$t('machinePrinterManage.validate.machineNameRequired'), trigger: 'blur' },
  85 + { max: 200, message: this.$t('machinePrinterManage.validate.machineNameMaxLength'), trigger: 'blur' }
  86 + ],
  87 + machineCode: [
  88 + { required: true, message: this.$t('machinePrinterManage.validate.machineCodeRequired'), trigger: 'blur' },
  89 + { max: 30, message: this.$t('machinePrinterManage.validate.machineCodeMaxLength'), trigger: 'blur' }
  90 + ],
  91 + implBean: [
  92 + { required: true, message: this.$t('machinePrinterManage.validate.implBeanRequired'), trigger: 'change' },
  93 + { max: 30, message: this.$t('machinePrinterManage.validate.implBeanMaxLength'), trigger: 'blur' }
  94 + ]
  95 + }
  96 + }
  97 + },
  98 + methods: {
  99 + open(row) {
  100 + this.form = { ...row }
  101 + this.visible = true
  102 + this.getDictData()
  103 + },
  104 + async getDictData() {
  105 + try {
  106 + const data = await getDict('machine_printer', 'impl_bean')
  107 + this.implBeans = data
  108 + } catch (error) {
  109 + console.error('获取字典数据失败:', error)
  110 + }
  111 + },
  112 + handleClose() {
  113 + this.$refs.form.resetFields()
  114 + },
  115 + handleSubmit() {
  116 + this.$refs.form.validate(async valid => {
  117 + if (valid) {
  118 + try {
  119 + await updateMachinePrinter(this.form)
  120 + this.$message.success(this.$t('machinePrinterManage.message.editSuccess'))
  121 + this.visible = false
  122 + this.$emit('success')
  123 + } catch (error) {
  124 + console.error('修改失败:', error)
  125 + }
  126 + }
  127 + })
  128 + }
  129 + }
  130 +}
  131 +</script>
0 132 \ No newline at end of file
... ...
src/components/machine/editMachineTranslate.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('machineTranslateManage.edit.title')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form ref="form" :model="formData" label-width="120px">
  9 + <el-form-item :label="$t('machineTranslateManage.edit.machineCode')">
  10 + <el-input v-model="formData.machineCode" disabled />
  11 + </el-form-item>
  12 + <el-form-item :label="$t('machineTranslateManage.edit.machineId')">
  13 + <el-input v-model="formData.machineId" disabled />
  14 + </el-form-item>
  15 + <el-form-item :label="$t('machineTranslateManage.edit.typeCd')">
  16 + <el-select v-model="formData.typeCd" disabled style="width: 100%">
  17 + <el-option
  18 + v-for="item in typeOptions"
  19 + :key="item.value"
  20 + :label="item.label"
  21 + :value="item.value"
  22 + />
  23 + </el-select>
  24 + </el-form-item>
  25 + <el-form-item :label="$t('machineTranslateManage.edit.objName')">
  26 + <el-input v-model="formData.objName" disabled />
  27 + </el-form-item>
  28 + <el-form-item :label="$t('machineTranslateManage.edit.objId')">
  29 + <el-input v-model="formData.objId" disabled />
  30 + </el-form-item>
  31 + </el-form>
  32 + <span slot="footer" class="dialog-footer">
  33 + <el-button @click="visible = false">
  34 + {{ $t('common.cancel') }}
  35 + </el-button>
  36 + <el-button type="primary" @click="handleSubmit">
  37 + {{ $t('machineTranslateManage.button.resync') }}
  38 + </el-button>
  39 + </span>
  40 + </el-dialog>
  41 +</template>
  42 +
  43 +<script>
  44 +import { resendIot } from '@/api/machine/machineTranslateManageApi'
  45 +import { getCommunityId } from '@/api/community/communityApi'
  46 +
  47 +export default {
  48 + name: 'EditMachineTranslate',
  49 + data() {
  50 + return {
  51 + visible: false,
  52 + formData: {
  53 + machineTranslateId: '',
  54 + machineCode: '',
  55 + machineId: '',
  56 + typeCd: '',
  57 + objName: '',
  58 + objId: '',
  59 + communityId: ''
  60 + },
  61 + typeOptions: [
  62 + { value: '8899', label: this.$t('machineTranslateManage.type.owner') },
  63 + { value: '9988', label: this.$t('machineTranslateManage.type.community') },
  64 + { value: '7788', label: this.$t('machineTranslateManage.type.keyInfo') },
  65 + { value: '6677', label: this.$t('machineTranslateManage.type.visitorInfo') },
  66 + { value: '5566', label: this.$t('machineTranslateManage.type.staffFace') },
  67 + { value: '4455', label: this.$t('machineTranslateManage.type.carInfo') },
  68 + { value: '3344', label: this.$t('machineTranslateManage.type.deviceInfo') }
  69 + ]
  70 + }
  71 + },
  72 + methods: {
  73 + open(data) {
  74 + this.formData = { ...data }
  75 + this.formData.communityId = getCommunityId()
  76 + this.visible = true
  77 + },
  78 + handleClose() {
  79 + this.$refs.form.resetFields()
  80 + },
  81 + async handleSubmit() {
  82 + try {
  83 + await resendIot(this.formData)
  84 + this.$message.success(this.$t('machineTranslateManage.message.resyncSuccess'))
  85 + this.visible = false
  86 + this.$emit('success')
  87 + } catch (error) {
  88 + console.error('重新同步失败:', error)
  89 + }
  90 + }
  91 + }
  92 +}
  93 +</script>
0 94 \ No newline at end of file
... ...
src/components/machine/editPrinterRule.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRule.editTitle')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  9 + <el-form-item :label="$t('printerRule.ruleName')" prop="ruleName">
  10 + <el-input
  11 + v-model="form.ruleName"
  12 + :placeholder="$t('printerRule.ruleNamePlaceholder')"
  13 + ></el-input>
  14 + </el-form-item>
  15 + <el-form-item :label="$t('printerRule.remark')" prop="remark">
  16 + <el-input
  17 + type="textarea"
  18 + v-model="form.remark"
  19 + :placeholder="$t('printerRule.remarkPlaceholder')"
  20 + ></el-input>
  21 + </el-form-item>
  22 + </el-form>
  23 +
  24 + <span slot="footer" class="dialog-footer">
  25 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  26 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  27 + </span>
  28 + </el-dialog>
  29 +</template>
  30 +
  31 +<script>
  32 +import { updatePrinterRule } from '@/api/machine/printerRuleApi'
  33 +import { getCommunityId } from '@/api/community/communityApi'
  34 +
  35 +export default {
  36 + name: 'EditPrinterRule',
  37 + data() {
  38 + return {
  39 + visible: false,
  40 + form: {
  41 + ruleId: '',
  42 + ruleName: '',
  43 + remark: '',
  44 + communityId: ''
  45 + },
  46 + rules: {
  47 + ruleName: [
  48 + { required: true, message: this.$t('printerRule.ruleNameRequired'), trigger: 'blur' },
  49 + { max: 64, message: this.$t('printerRule.ruleNameMaxLength'), trigger: 'blur' }
  50 + ],
  51 + remark: [
  52 + { max: 512, message: this.$t('printerRule.remarkMaxLength'), trigger: 'blur' }
  53 + ]
  54 + }
  55 + }
  56 + },
  57 + created() {
  58 + this.form.communityId = getCommunityId()
  59 + },
  60 + methods: {
  61 + open(data) {
  62 + this.visible = true
  63 + this.form = {
  64 + ruleId: data.ruleId,
  65 + ruleName: data.ruleName,
  66 + remark: data.remark,
  67 + communityId: getCommunityId()
  68 + }
  69 + },
  70 + handleClose() {
  71 + this.$refs.form.resetFields()
  72 + },
  73 + async handleSubmit() {
  74 + this.$refs.form.validate(async valid => {
  75 + if (valid) {
  76 + try {
  77 + await updatePrinterRule(this.form)
  78 + this.$message.success(this.$t('common.editSuccess'))
  79 + this.visible = false
  80 + this.$emit('success')
  81 + } catch (error) {
  82 + console.error('修改打印机规则失败:', error)
  83 + }
  84 + }
  85 + })
  86 + }
  87 + }
  88 +}
  89 +</script>
0 90 \ No newline at end of file
... ...
src/components/machine/editPrinterRuleMachine.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('printerRuleMachine.editTitle')"
  4 + :visible.sync="visible"
  5 + width="50%"
  6 + @close="handleClose"
  7 + >
  8 + <el-form
  9 + ref="form"
  10 + :model="form"
  11 + :rules="rules"
  12 + label-width="120px"
  13 + >
  14 + <el-form-item
  15 + :label="$t('printerRuleMachine.machine')"
  16 + prop="machineId"
  17 + >
  18 + <el-select
  19 + v-model="form.machineId"
  20 + :placeholder="$t('printerRuleMachine.machinePlaceholder')"
  21 + style="width:100%"
  22 + >
  23 + <el-option
  24 + v-for="item in machines"
  25 + :key="item.machineId"
  26 + :label="`${item.machineName}(${item.machineCode})`"
  27 + :value="item.machineId"
  28 + />
  29 + </el-select>
  30 + </el-form-item>
  31 + <el-form-item
  32 + :label="$t('printerRuleMachine.quantity')"
  33 + prop="quantity"
  34 + >
  35 + <el-input-number
  36 + v-model="form.quantity"
  37 + :min="1"
  38 + :max="100"
  39 + :placeholder="$t('printerRuleMachine.quantityPlaceholder')"
  40 + />
  41 + </el-form-item>
  42 + </el-form>
  43 +
  44 + <span slot="footer" class="dialog-footer">
  45 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  46 + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
  47 + </span>
  48 + </el-dialog>
  49 +</template>
  50 +
  51 +<script>
  52 +import { updatePrinterRuleMachine, listMachinePrinters } from '@/api/machine/printerRuleApi'
  53 +import { getCommunityId } from '@/api/community/communityApi'
  54 +
  55 +export default {
  56 + name: 'EditPrinterRuleMachine',
  57 + data() {
  58 + return {
  59 + visible: false,
  60 + form: {
  61 + prmId: '',
  62 + machineId: '',
  63 + quantity: 1,
  64 + communityId: ''
  65 + },
  66 + machines: [],
  67 + rules: {
  68 + machineId: [
  69 + { required: true, message: this.$t('printerRuleMachine.machineRequired'), trigger: 'change' }
  70 + ],
  71 + quantity: [
  72 + { required: true, message: this.$t('printerRuleMachine.quantityRequired'), trigger: 'blur' }
  73 + ]
  74 + }
  75 + }
  76 + },
  77 + created() {
  78 + this.form.communityId = getCommunityId()
  79 + this.getMachines()
  80 + },
  81 + methods: {
  82 + open(row) {
  83 + this.visible = true
  84 + this.form = {
  85 + prmId: row.prmId,
  86 + machineId: row.machineId,
  87 + quantity: row.quantity,
  88 + communityId: getCommunityId()
  89 + }
  90 + },
  91 + handleClose() {
  92 + this.$refs.form.resetFields()
  93 + },
  94 + async getMachines() {
  95 + try {
  96 + const params = {
  97 + page: 1,
  98 + row: 100,
  99 + communityId: this.form.communityId
  100 + }
  101 + const { data } = await listMachinePrinters(params)
  102 + this.machines = data
  103 + } catch (error) {
  104 + console.error('获取打印机列表失败:', error)
  105 + }
  106 + },
  107 + async handleSubmit() {
  108 + this.$refs.form.validate(async valid => {
  109 + if (valid) {
  110 + try {
  111 + await updatePrinterRuleMachine(this.form)
  112 + this.$message.success(this.$t('common.editSuccess'))
  113 + this.visible = false
  114 + this.$emit('success')
  115 + } catch (error) {
  116 + console.error('修改打印机规则机器失败:', error)
  117 + }
  118 + }
  119 + })
  120 + }
  121 + }
  122 +}
  123 +</script>
0 124 \ No newline at end of file
... ...
src/components/machine/printerRuleDiv.vue 0 → 100644
  1 +<template>
  2 + <el-card class="box-card">
  3 + <div class="button-group">
  4 + <el-button type="primary" size="small" @click="openAddModal">
  5 + <i class="el-icon-plus"></i>{{ $t('common.add') }}
  6 + </el-button>
  7 + <el-button type="primary" size="small" @click="openEditModal">
  8 + <i class="el-icon-edit"></i>{{ $t('common.edit') }}
  9 + </el-button>
  10 + <el-button type="primary" size="small" @click="openDeleteModal">
  11 + <i class="el-icon-delete"></i>{{ $t('common.delete') }}
  12 + </el-button>
  13 + </div>
  14 +
  15 + <div class="vc-org margin-top">
  16 + <el-tree :data="printerRules" :props="defaultProps" @node-click="handleNodeClick" highlight-current></el-tree>
  17 + </div>
  18 +
  19 + <add-printer-rule ref="addPrinterRule" @success="getPrinterRules" />
  20 + <edit-printer-rule ref="editPrinterRule" @success="getPrinterRules" />
  21 + <delete-printer-rule ref="deletePrinterRule" @success="getPrinterRules" />
  22 + </el-card>
  23 +</template>
  24 +
  25 +<script>
  26 +import { listPrinterRules } from '@/api/machine/printerRuleApi'
  27 +import { getCommunityId } from '@/api/community/communityApi'
  28 +import AddPrinterRule from '@/components/machine/addPrinterRule'
  29 +import EditPrinterRule from '@/components/machine/editPrinterRule'
  30 +import DeletePrinterRule from '@/components/machine/deletePrinterRule'
  31 +
  32 +export default {
  33 + name: 'PrinterRuleDiv',
  34 + props: {
  35 + value: {
  36 + type: Object,
  37 + default: () => ({})
  38 + }
  39 + },
  40 + components: {
  41 + AddPrinterRule,
  42 + EditPrinterRule,
  43 + DeletePrinterRule
  44 + },
  45 + data() {
  46 + return {
  47 + printerRules: [],
  48 + defaultProps: {
  49 + children: 'children',
  50 + label: 'ruleName'
  51 + },
  52 + curRule:{},
  53 + communityId: ''
  54 + }
  55 + },
  56 + created() {
  57 + this.communityId = getCommunityId()
  58 + this.getPrinterRules()
  59 + },
  60 + methods: {
  61 + async getPrinterRules() {
  62 + try {
  63 + const params = {
  64 + page: 1,
  65 + row: 100,
  66 + communityId: this.communityId
  67 + }
  68 + const { data } = await listPrinterRules(params)
  69 + this.printerRules = data
  70 + if (this.printerRules.length > 0) {
  71 + this.handleNodeClick(this.printerRules[0])
  72 + }
  73 + } catch (error) {
  74 + console.error('获取打印机规则失败:', error)
  75 + }
  76 + },
  77 + handleNodeClick(data) {
  78 + this.curRule = data
  79 + },
  80 + openAddModal() {
  81 + this.$refs.addPrinterRule.open()
  82 + },
  83 + openEditModal() {
  84 + if (!this.curRule.ruleId) {
  85 + this.$message.warning(this.$t('printerRule.selectRule'))
  86 + return
  87 + }
  88 + this.$refs.editPrinterRule.open(this.curRule)
  89 +
  90 + },
  91 + openDeleteModal() {
  92 + if (!this.curRule.ruleId) {
  93 + this.$message.warning(this.$t('printerRule.selectRule'))
  94 + return
  95 + }
  96 + this.$refs.deletePrinterRule.open(this.curRule)
  97 + },
  98 + refreshList() {
  99 + this.getPrinterRules()
  100 + }
  101 + }
  102 +}
  103 +</script>
  104 +
  105 +<style scoped>
  106 +.button-group {
  107 + margin-bottom: 15px;
  108 +}
  109 +
  110 +.vc-org {
  111 + max-height: 500px;
  112 + overflow-y: auto;
  113 +}
  114 +
  115 +.margin-top {
  116 + margin-top: 15px;
  117 +}
  118 +</style>
0 119 \ No newline at end of file
... ...
src/components/machine/printerRuleFees.vue 0 → 100644
  1 +<template>
  2 + <div class="printer-rule-fees">
  3 +
  4 + <el-form :inline="true" :model="searchForm" class="search-form">
  5 + <el-form-item :label="$t('printerRuleFees.id')">
  6 + <el-input v-model="searchForm.prfId" :placeholder="$t('printerRuleFees.idPlaceholder')" clearable />
  7 + </el-form-item>
  8 + <el-form-item :label="$t('printerRuleFees.feeName')">
  9 + <el-input v-model="searchForm.feeConfigName" :placeholder="$t('printerRuleFees.feeNamePlaceholder')" clearable />
  10 + </el-form-item>
  11 + <el-form-item>
  12 + <el-button type="primary" @click="handleSearch">
  13 + {{ $t('common.search') }}
  14 + </el-button>
  15 + <el-button @click="handleReset">
  16 + {{ $t('common.reset') }}
  17 + </el-button>
  18 + <el-button type="primary" @click="openAddModal">
  19 + <i class="el-icon-plus"></i>
  20 + {{ $t('common.add') }}
  21 + </el-button>
  22 + </el-form-item>
  23 + </el-form>
  24 +
  25 +
  26 +
  27 + <el-table :data="tableData" border style="width: 100%" v-loading="loading">
  28 + <el-table-column prop="prfId" :label="$t('printerRuleFees.table.id')" align="center" />
  29 + <el-table-column prop="feeConfigName" :label="$t('printerRuleFees.table.feeName')" align="center" />
  30 + <el-table-column :label="$t('common.operation')" align="center" width="150">
  31 + <template slot-scope="scope">
  32 + <el-button size="mini" type="danger" @click="openDeleteModal(scope.row)">
  33 + {{ $t('common.delete') }}
  34 + </el-button>
  35 + </template>
  36 + </el-table-column>
  37 + </el-table>
  38 +
  39 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  40 + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size"
  41 + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" />
  42 +
  43 +
  44 + <add-printer-rule-fee ref="addPrinterRuleFee" :rule-id="ruleId" @success="handleSuccess" />
  45 + <delete-printer-rule-fee ref="deletePrinterRuleFee" @success="handleSuccess" />
  46 + </div>
  47 +</template>
  48 +
  49 +<script>
  50 +import { listPrinterRuleFees } from '@/api/machine/printerRuleApi'
  51 +import { getCommunityId } from '@/api/community/communityApi'
  52 +import AddPrinterRuleFee from './addPrinterRuleFee'
  53 +import DeletePrinterRuleFee from './deletePrinterRuleFee'
  54 +
  55 +export default {
  56 + name: 'PrinterRuleFees',
  57 + components: {
  58 + AddPrinterRuleFee,
  59 + DeletePrinterRuleFee
  60 + },
  61 + props: {
  62 + ruleId: {
  63 + type: String,
  64 + required: true
  65 + }
  66 + },
  67 + data() {
  68 + return {
  69 + searchForm: {
  70 + prfId: '',
  71 + feeConfigName: '',
  72 + ruleId: '',
  73 + communityId: ''
  74 + },
  75 + tableData: [],
  76 + loading: false,
  77 + pagination: {
  78 + current: 1,
  79 + size: 10,
  80 + total: 0
  81 + }
  82 + }
  83 + },
  84 + created() {
  85 + this.searchForm.communityId = getCommunityId()
  86 + this.searchForm.ruleId = this.ruleId
  87 + this.getList()
  88 + },
  89 + methods: {
  90 + async getList() {
  91 + this.loading = true
  92 + try {
  93 + const params = {
  94 + ...this.searchForm,
  95 + page: this.pagination.current,
  96 + row: this.pagination.size
  97 + }
  98 + const { data, total } = await listPrinterRuleFees(params)
  99 + this.tableData = data
  100 + this.pagination.total = total
  101 + } catch (error) {
  102 + console.error('获取缴费自动打印列表失败:', error)
  103 + } finally {
  104 + this.loading = false
  105 + }
  106 + },
  107 + handleSearch() {
  108 + this.pagination.current = 1
  109 + this.getList()
  110 + },
  111 + handleReset() {
  112 + this.searchForm.prfId = ''
  113 + this.searchForm.feeConfigName = ''
  114 + this.handleSearch()
  115 + },
  116 + handleSizeChange(val) {
  117 + this.pagination.size = val
  118 + this.getList()
  119 + },
  120 + handleCurrentChange(val) {
  121 + this.pagination.current = val
  122 + this.getList()
  123 + },
  124 + openAddModal() {
  125 + this.$refs.addPrinterRuleFee.open()
  126 + },
  127 + openDeleteModal(row) {
  128 + this.$refs.deletePrinterRuleFee.open(row)
  129 + },
  130 + handleSuccess() {
  131 + this.getList()
  132 + }
  133 + }
  134 +}
  135 +</script>
  136 +
  137 +<style scoped>
  138 +.printer-rule-fees {
  139 + padding: 20px;
  140 +}
  141 +
  142 +.search-card {
  143 + margin-bottom: 20px;
  144 +}
  145 +
  146 +.search-form {
  147 + display: flex;
  148 + flex-wrap: wrap;
  149 +}
  150 +
  151 +.el-pagination {
  152 + margin-top: 20px;
  153 + text-align: right;
  154 +}
  155 +</style>
0 156 \ No newline at end of file
... ...
src/components/machine/printerRuleMachine.vue 0 → 100644
  1 +<template>
  2 + <div class="printer-rule-machine">
  3 +
  4 + <el-form :inline="true" :model="searchForm" class="search-form">
  5 + <el-form-item :label="$t('printerRuleMachine.id')">
  6 + <el-input v-model="searchForm.prmId" :placeholder="$t('printerRuleMachine.idPlaceholder')" clearable />
  7 + </el-form-item>
  8 + <el-form-item :label="$t('printerRuleMachine.machineName')">
  9 + <el-input v-model="searchForm.machineName" :placeholder="$t('printerRuleMachine.machineNamePlaceholder')"
  10 + clearable />
  11 + </el-form-item>
  12 + <el-form-item>
  13 + <el-button type="primary" @click="handleSearch">
  14 + {{ $t('common.search') }}
  15 + </el-button>
  16 + <el-button @click="handleReset">
  17 + {{ $t('common.reset') }}
  18 + </el-button>
  19 + <el-button type="primary" @click="openAddModal">
  20 + <i class="el-icon-plus"></i>
  21 + {{ $t('common.add') }}
  22 + </el-button>
  23 + </el-form-item>
  24 + </el-form>
  25 +
  26 +
  27 + <el-table :data="tableData" border style="width: 100%" v-loading="loading">
  28 + <el-table-column prop="prmId" :label="$t('printerRuleMachine.table.id')" align="center" />
  29 + <el-table-column prop="machineName" :label="$t('printerRuleMachine.table.machineName')" align="center" />
  30 + <el-table-column prop="quantity" :label="$t('printerRuleMachine.table.quantity')" align="center" />
  31 + <el-table-column :label="$t('common.operation')" align="center" width="200">
  32 + <template slot-scope="scope">
  33 + <el-button size="mini" @click="openEditModal(scope.row)">
  34 + {{ $t('common.edit') }}
  35 + </el-button>
  36 + <el-button size="mini" type="danger" @click="openDeleteModal(scope.row)">
  37 + {{ $t('common.delete') }}
  38 + </el-button>
  39 + </template>
  40 + </el-table-column>
  41 + </el-table>
  42 +
  43 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  44 + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size"
  45 + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" />
  46 +
  47 +
  48 + <add-printer-rule-machine ref="addPrinterRuleMachine" :ruleId="searchForm.ruleId" @success="handleSuccess" />
  49 + <edit-printer-rule-machine ref="editPrinterRuleMachine" @success="handleSuccess" />
  50 + <delete-printer-rule-machine ref="deletePrinterRuleMachine" @success="handleSuccess" />
  51 + </div>
  52 +</template>
  53 +
  54 +<script>
  55 +import { listPrinterRuleMachines } from '@/api/machine/printerRuleApi'
  56 +import { getCommunityId } from '@/api/community/communityApi'
  57 +import AddPrinterRuleMachine from './addPrinterRuleMachine'
  58 +import EditPrinterRuleMachine from './editPrinterRuleMachine'
  59 +import DeletePrinterRuleMachine from './deletePrinterRuleMachine'
  60 +
  61 +export default {
  62 + name: 'PrinterRuleMachine',
  63 + components: {
  64 + AddPrinterRuleMachine,
  65 + EditPrinterRuleMachine,
  66 + DeletePrinterRuleMachine
  67 + },
  68 + data() {
  69 + return {
  70 + searchForm: {
  71 + prmId: '',
  72 + machineName: '',
  73 + ruleId: '',
  74 + communityId: ''
  75 + },
  76 + tableData: [],
  77 + loading: false,
  78 + pagination: {
  79 + current: 1,
  80 + size: 10,
  81 + total: 0
  82 + }
  83 + }
  84 + },
  85 + created() {
  86 + this.searchForm.communityId = getCommunityId()
  87 + this.getList()
  88 + },
  89 + methods: {
  90 + open(ruleId) {
  91 + this.searchForm.ruleId = ruleId
  92 + },
  93 + async getList() {
  94 + this.loading = true
  95 + try {
  96 + const params = {
  97 + ...this.searchForm,
  98 + page: this.pagination.current,
  99 + row: this.pagination.size
  100 + }
  101 + const { data, total } = await listPrinterRuleMachines(params)
  102 + this.tableData = data
  103 + this.pagination.total = total
  104 + } catch (error) {
  105 + console.error('获取打印机规则机器列表失败:', error)
  106 + } finally {
  107 + this.loading = false
  108 + }
  109 + },
  110 + handleSearch() {
  111 + this.pagination.current = 1
  112 + this.getList()
  113 + },
  114 + handleReset() {
  115 + this.searchForm.prmId = ''
  116 + this.searchForm.machineName = ''
  117 + this.handleSearch()
  118 + },
  119 + handleSizeChange(val) {
  120 + this.pagination.size = val
  121 + this.getList()
  122 + },
  123 + handleCurrentChange(val) {
  124 + this.pagination.current = val
  125 + this.getList()
  126 + },
  127 + openAddModal() {
  128 + this.$refs.addPrinterRuleMachine.open(this.searchForm.ruleId )
  129 + },
  130 + openEditModal(row) {
  131 + this.$refs.editPrinterRuleMachine.open(row)
  132 + },
  133 + openDeleteModal(row) {
  134 + this.$refs.deletePrinterRuleMachine.open(row)
  135 + },
  136 + handleSuccess() {
  137 + this.getList()
  138 + }
  139 + }
  140 +}
  141 +</script>
  142 +
  143 +<style scoped>
  144 +.printer-rule-machine {
  145 + padding: 20px;
  146 +}
  147 +
  148 +.search-card {
  149 + margin-bottom: 20px;
  150 +}
  151 +
  152 +.search-form {
  153 + display: flex;
  154 + flex-wrap: wrap;
  155 +}
  156 +
  157 +.el-pagination {
  158 + margin-top: 20px;
  159 + text-align: right;
  160 +}
  161 +</style>
0 162 \ No newline at end of file
... ...
src/components/machine/printerRuleRepair.vue 0 → 100644
  1 +<template>
  2 + <div class="printer-rule-repair">
  3 +
  4 + <el-form :inline="true" :model="searchForm" class="search-form">
  5 + <el-form-item :label="$t('printerRuleRepair.id')">
  6 + <el-input v-model="searchForm.prrId" :placeholder="$t('printerRuleRepair.idPlaceholder')" clearable />
  7 + </el-form-item>
  8 + <el-form-item :label="$t('printerRuleRepair.repairType')">
  9 + <el-input v-model="searchForm.repairTypeName" :placeholder="$t('printerRuleRepair.repairTypePlaceholder')"
  10 + clearable />
  11 + </el-form-item>
  12 + <el-form-item>
  13 + <el-button type="primary" @click="handleSearch">
  14 + {{ $t('common.search') }}
  15 + </el-button>
  16 + <el-button @click="handleReset">
  17 + {{ $t('common.reset') }}
  18 + </el-button>
  19 + <el-button type="primary" @click="openAddModal">
  20 + <i class="el-icon-plus"></i>
  21 + {{ $t('common.add') }}
  22 + </el-button>
  23 + </el-form-item>
  24 + </el-form>
  25 +
  26 +
  27 +
  28 + <el-table :data="tableData" border style="width: 100%" v-loading="loading">
  29 + <el-table-column prop="prrId" :label="$t('printerRuleRepair.table.id')" align="center" />
  30 + <el-table-column prop="repairTypeName" :label="$t('printerRuleRepair.table.repairType')" align="center" />
  31 + <el-table-column :label="$t('common.operation')" align="center" width="150">
  32 + <template slot-scope="scope">
  33 + <el-button size="mini" type="danger" @click="openDeleteModal(scope.row)">
  34 + {{ $t('common.delete') }}
  35 + </el-button>
  36 + </template>
  37 + </el-table-column>
  38 + </el-table>
  39 +
  40 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  41 + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size"
  42 + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" />
  43 +
  44 +
  45 + <add-printer-rule-repair ref="addPrinterRuleRepair" :rule-id="ruleId" @success="handleSuccess" />
  46 + <delete-printer-rule-repair ref="deletePrinterRuleRepair" @success="handleSuccess" />
  47 + </div>
  48 +</template>
  49 +
  50 +<script>
  51 +import { listPrinterRuleRepairs } from '@/api/machine/printerRuleApi'
  52 +import { getCommunityId } from '@/api/community/communityApi'
  53 +import AddPrinterRuleRepair from './addPrinterRuleRepair'
  54 +import DeletePrinterRuleRepair from './deletePrinterRuleRepair'
  55 +
  56 +export default {
  57 + name: 'PrinterRuleRepair',
  58 + components: {
  59 + AddPrinterRuleRepair,
  60 + DeletePrinterRuleRepair
  61 + },
  62 + props: {
  63 + ruleId: {
  64 + type: String,
  65 + required: true
  66 + }
  67 + },
  68 + data() {
  69 + return {
  70 + searchForm: {
  71 + prrId: '',
  72 + repairTypeName: '',
  73 + ruleId: '',
  74 + communityId: ''
  75 + },
  76 + tableData: [],
  77 + loading: false,
  78 + pagination: {
  79 + current: 1,
  80 + size: 10,
  81 + total: 0
  82 + }
  83 + }
  84 + },
  85 + created() {
  86 + this.searchForm.communityId = getCommunityId()
  87 + this.searchForm.ruleId = this.ruleId
  88 + this.getList()
  89 + },
  90 + methods: {
  91 + async getList() {
  92 + this.loading = true
  93 + try {
  94 + const params = {
  95 + ...this.searchForm,
  96 + page: this.pagination.current,
  97 + row: this.pagination.size
  98 + }
  99 + const { data, total } = await listPrinterRuleRepairs(params)
  100 + this.tableData = data
  101 + this.pagination.total = total
  102 + } catch (error) {
  103 + console.error('获取报修自动打印列表失败:', error)
  104 + } finally {
  105 + this.loading = false
  106 + }
  107 + },
  108 + handleSearch() {
  109 + this.pagination.current = 1
  110 + this.getList()
  111 + },
  112 + handleReset() {
  113 + this.searchForm.prrId = ''
  114 + this.searchForm.repairTypeName = ''
  115 + this.handleSearch()
  116 + },
  117 + handleSizeChange(val) {
  118 + this.pagination.size = val
  119 + this.getList()
  120 + },
  121 + handleCurrentChange(val) {
  122 + this.pagination.current = val
  123 + this.getList()
  124 + },
  125 + openAddModal() {
  126 + this.$refs.addPrinterRuleRepair.open()
  127 + },
  128 + openDeleteModal(row) {
  129 + this.$refs.deletePrinterRuleRepair.open(row)
  130 + },
  131 + handleSuccess() {
  132 + this.getList()
  133 + }
  134 + }
  135 +}
  136 +</script>
  137 +
  138 +<style scoped>
  139 +.printer-rule-repair {
  140 + padding: 20px;
  141 +}
  142 +
  143 +.search-card {
  144 + margin-bottom: 20px;
  145 +}
  146 +
  147 +.search-form {
  148 + display: flex;
  149 + flex-wrap: wrap;
  150 +}
  151 +
  152 +.el-pagination {
  153 + margin-top: 20px;
  154 + text-align: right;
  155 +}
  156 +</style>
0 157 \ No newline at end of file
... ...
src/i18n/index.js
... ... @@ -205,6 +205,7 @@ import { messages as editEquipmentAccountMessages } from &#39;../views/machine/editE
205 205 import { messages as equipmentAccountDetailMessages } from '../views/machine/equipmentAccountDetailLang'
206 206 import { messages as printEquipmentAccountLabelMessages } from '../views/resource/printEquipmentAccountLabelLang'
207 207 import {messages as inspectioni18n} from './inspectionI18n'
  208 +import {messages as machineI18n} from './machineI18n'
208 209  
209 210 Vue.use(VueI18n)
210 211  
... ... @@ -414,6 +415,7 @@ const messages = {
414 415 ...equipmentAccountDetailMessages.en,
415 416 ...printEquipmentAccountLabelMessages.en,
416 417 ...inspectioni18n.en,
  418 + ...machineI18n.en,
417 419 },
418 420 zh: {
419 421 ...loginMessages.zh,
... ... @@ -619,6 +621,7 @@ const messages = {
619 621 ...equipmentAccountDetailMessages.zh,
620 622 ...printEquipmentAccountLabelMessages.zh,
621 623 ...inspectioni18n.zh,
  624 + ...machineI18n.zh,
622 625 }
623 626 }
624 627  
... ...
src/i18n/machineI18n.js 0 → 100644
  1 +import { messages as machineTranslateManageMessages } from '../views/machine/machineTranslateManageLang'
  2 +import { messages as accessControlInoutMessages } from '../views/machine/accessControlInoutLang'
  3 +import { messages as machinePrinterManageMessages } from '../views/machine/machinePrinterManageLang'
  4 +import { messages as printerRuleMessages } from '../views/machine/printerRuleLang'
  5 +export const messages ={
  6 + en:{
  7 + ...machineTranslateManageMessages.en,
  8 + ...accessControlInoutMessages.en,
  9 + ...machinePrinterManageMessages.en,
  10 + ...printerRuleMessages.en,
  11 + },
  12 + zh:{
  13 + ...machineTranslateManageMessages.zh,
  14 + ...accessControlInoutMessages.zh,
  15 + ...machinePrinterManageMessages.zh,
  16 + ...printerRuleMessages.zh,
  17 + }
  18 +}
0 19 \ No newline at end of file
... ...
src/router/index.js
... ... @@ -4,6 +4,7 @@ import Layout from &#39;@/views/layout/layout.vue&#39;
4 4 import Login from '@/views/user/login/Login.vue'
5 5 import printEquipmentAccountLabel from '@/views/resource/printEquipmentAccountLabelList.vue'
6 6 import inspectionRouter from './inspectionRouter'
  7 +import machineRouter from './machineRouter'
7 8  
8 9 Vue.use(VueRouter)
9 10  
... ... @@ -359,11 +360,7 @@ const routes = [
359 360 name: '/pages/iot/adminBarrier',
360 361 component: () => import('@/views/iot/adminBarrierList.vue')
361 362 },
362   - {
363   - path: '/pages/iot/adminChargeMachine',
364   - name: '/pages/iot/adminChargeMachine',
365   - component: () => import('@/views/iot/adminChargeMachineList.vue')
366   - },
  363 +
367 364 {
368 365 path: '/pages/iot/adminMeter',
369 366 name: '/pages/iot/adminMeter',
... ... @@ -926,32 +923,9 @@ const routes = [
926 923 name: '/pages/property/locationManage',
927 924 component: () => import('@/views/community/locationManageList.vue')
928 925 },
929   - {
930   - path: '/pages/property/machineTypeTreeManage',
931   - name: '/pages/property/machineTypeTreeManage',
932   - component: () => import('@/views/machine/machineTypeTreeManageList.vue')
933   - },
934   - {
935   - path: '/pages/property/equipmentAccount',
936   - name: '/pages/property/equipmentAccount',
937   - component: () => import('@/views/machine/equipmentAccountList.vue')
938   - },
939   - {
940   - path: '/views/machine/addEquipmentAccount',
941   - name: '/views/machine/addEquipmentAccount',
942   - component: () => import('@/views/machine/addEquipmentAccountList.vue')
943   - },
944   - {
945   - path: '/views/machine/editEquipmentAccount',
946   - name: '/views/machine/editEquipmentAccount',
947   - component: () => import('@/views/machine/editEquipmentAccountList.vue')
948   - },
949   - {
950   - path: '/views/machine/equipmentAccountDetail',
951   - name: '/views/machine/equipmentAccountDetail',
952   - component: () => import('@/views/machine/equipmentAccountDetailList.vue')
953   - },
954   - ...inspectionRouter
  926 +
  927 + ...inspectionRouter,
  928 + ...machineRouter,
955 929 // 其他子路由可以在这里添加
956 930 ]
957 931 },
... ...
src/router/machineRouter.js 0 → 100644
  1 +export default [
  2 + {
  3 + path: '/pages/property/machineTypeTreeManage',
  4 + name: '/pages/property/machineTypeTreeManage',
  5 + component: () => import('@/views/machine/machineTypeTreeManageList.vue')
  6 + },
  7 + {
  8 + path: '/pages/property/equipmentAccount',
  9 + name: '/pages/property/equipmentAccount',
  10 + component: () => import('@/views/machine/equipmentAccountList.vue')
  11 + },
  12 + {
  13 + path: '/views/machine/addEquipmentAccount',
  14 + name: '/views/machine/addEquipmentAccount',
  15 + component: () => import('@/views/machine/addEquipmentAccountList.vue')
  16 + },
  17 + {
  18 + path: '/views/machine/editEquipmentAccount',
  19 + name: '/views/machine/editEquipmentAccount',
  20 + component: () => import('@/views/machine/editEquipmentAccountList.vue')
  21 + },
  22 + {
  23 + path: '/views/machine/equipmentAccountDetail',
  24 + name: '/views/machine/equipmentAccountDetail',
  25 + component: () => import('@/views/machine/equipmentAccountDetailList.vue')
  26 + },
  27 + {
  28 + path: '/pages/iot/adminChargeMachine',
  29 + name: '/pages/iot/adminChargeMachine',
  30 + component: () => import('@/views/iot/adminChargeMachineList.vue')
  31 + },
  32 + {
  33 + path: '/pages/property/machineTranslateManage',
  34 + name: '/pages/property/machineTranslateManage',
  35 + component: () => import('@/views/machine/machineTranslateManageList.vue')
  36 + },
  37 + {
  38 + path: '/pages/machine/accessControlInout',
  39 + name: '/pages/machine/accessControlInout',
  40 + component: () => import('@/views/machine/accessControlInoutList.vue')
  41 + },
  42 + {
  43 + path: '/pages/print/machinePrinterManage',
  44 + name: '/pages/print/machinePrinterManage',
  45 + component: () => import('@/views/machine/machinePrinterManageList.vue')
  46 + },
  47 + {
  48 + path: '/pages/print/printerRule',
  49 + name: '/pages/print/printerRule',
  50 + component: () => import('@/views/machine/printerRuleList.vue')
  51 + },
  52 +]
0 53 \ No newline at end of file
... ...
src/views/machine/accessControlInoutLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + accessControlInout: {
  4 + search: {
  5 + title: 'Search Conditions',
  6 + machine: 'Please select access control',
  7 + name: 'Please enter user name',
  8 + tel: 'Please enter phone number',
  9 + state: 'Please select open status',
  10 + startTime: 'Please enter start time',
  11 + endTime: 'Please enter end time'
  12 + },
  13 + table: {
  14 + title: 'Access Records',
  15 + face: 'Face',
  16 + id: 'ID',
  17 + machineName: 'Device Name',
  18 + machineCode: 'Device Code',
  19 + userName: 'User Name',
  20 + openType: 'Open Type',
  21 + tel: 'Phone',
  22 + idCard: 'ID Card',
  23 + similar: 'Similarity',
  24 + state: 'Status',
  25 + createTime: 'Open Time'
  26 + },
  27 + openType: {
  28 + all: 'All',
  29 + face: 'Face',
  30 + key: 'Key',
  31 + qrcode: 'QR Code',
  32 + password: 'Password'
  33 + },
  34 + state: {
  35 + success: 'Success',
  36 + fail: 'Failed'
  37 + }
  38 + }
  39 + },
  40 + zh:{
  41 + accessControlInout: {
  42 + search: {
  43 + title: '查询条件',
  44 + machine: '请选择门禁',
  45 + name: '请填写用户名称',
  46 + tel: '请填写手机号',
  47 + state: '请选择开门状态',
  48 + startTime: '请输入开始时间',
  49 + endTime: '请输入结束时间'
  50 + },
  51 + table: {
  52 + title: '进出记录',
  53 + face: '人脸',
  54 + id: '编号',
  55 + machineName: '设备名称',
  56 + machineCode: '设备编码',
  57 + userName: '用户名称',
  58 + openType: '开门方式',
  59 + tel: '手机号',
  60 + idCard: '用户身份证',
  61 + similar: '相似度',
  62 + state: '开门状态',
  63 + createTime: '开门时间'
  64 + },
  65 + openType: {
  66 + all: '全部',
  67 + face: '人脸开门',
  68 + key: '钥匙开门',
  69 + qrcode: '二维码开门',
  70 + password: '密码开门'
  71 + },
  72 + state: {
  73 + success: '开门成功',
  74 + fail: '开门失败'
  75 + }
  76 + }
  77 + }
  78 +}
0 79 \ No newline at end of file
... ...
src/views/machine/accessControlInoutList.vue 0 → 100644
  1 +<template>
  2 + <div class="access-control-inout-container">
  3 + <el-row :gutter="20">
  4 + <el-col :span="4">
  5 + <el-card class="tree-card">
  6 + <ul class="tree-list">
  7 + <li v-for="(item, index) in accessControlInoutInfo.openTypeCds" :key="index" @click="swatchOpenTypeCd(item)"
  8 + :class="{ 'selected': accessControlInoutInfo.conditions.openTypeCd === item.openTypeCd }">
  9 + {{ item.openTypeName }}
  10 + </li>
  11 + </ul>
  12 + </el-card>
  13 + </el-col>
  14 + <el-col :span="20">
  15 + <el-card class="search-card">
  16 + <div slot="header" class="flex justify-between">
  17 + <span>{{ $t('accessControlInout.search.title') }}</span>
  18 + </div>
  19 + <el-row :gutter="20">
  20 + <el-col :span="6">
  21 + <el-select v-model="accessControlInoutInfo.conditions.machineId"
  22 + :placeholder="$t('accessControlInout.search.machine')" style="width:100%">
  23 + <el-option v-for="item in accessControlInoutInfo.accessControls" :key="item.machineId"
  24 + :label="item.machineName" :value="item.machineId" />
  25 + </el-select>
  26 + </el-col>
  27 + <el-col :span="6">
  28 + <el-input v-model="accessControlInoutInfo.conditions.name"
  29 + :placeholder="$t('accessControlInout.search.name')" />
  30 + </el-col>
  31 + <el-col :span="6">
  32 + <el-input v-model="accessControlInoutInfo.conditions.tel"
  33 + :placeholder="$t('accessControlInout.search.tel')" />
  34 + </el-col>
  35 + <el-col :span="6">
  36 + <el-select v-model="accessControlInoutInfo.conditions.state"
  37 + :placeholder="$t('accessControlInout.search.state')" style="width:100%">
  38 + <el-option label="全部" value="" />
  39 + <el-option label="开门成功" value="C" />
  40 + <el-option label="开门失败" value="F" />
  41 + </el-select>
  42 + </el-col>
  43 + </el-row>
  44 + <el-row :gutter="20" style="margin-top:15px">
  45 + <el-col :span="6">
  46 + <el-date-picker v-model="accessControlInoutInfo.conditions.queryStartTime" type="datetime"
  47 + :placeholder="$t('accessControlInout.search.startTime')" style="width:100%" />
  48 + </el-col>
  49 + <el-col :span="6">
  50 + <el-date-picker v-model="accessControlInoutInfo.conditions.queryEndTime" type="datetime"
  51 + :placeholder="$t('accessControlInout.search.endTime')" style="width:100%" />
  52 + </el-col>
  53 + <el-col :span="6">
  54 + <el-button type="primary" @click="_queryAccessControlInoutMethod">
  55 + {{ $t('common.search') }}
  56 + </el-button>
  57 + </el-col>
  58 + </el-row>
  59 + </el-card>
  60 +
  61 + <el-card class="table-card" style="margin-top:20px">
  62 + <div slot="header" class="flex justify-between">
  63 + <span>{{ $t('accessControlInout.table.title') }}</span>
  64 + </div>
  65 + <el-table :data="accessControlInoutInfo.accessControlInouts" border style="width:100%" v-loading="loading">
  66 + <el-table-column prop="facePath" :label="$t('accessControlInout.table.face')" align="center" width="100">
  67 + <template slot-scope="scope">
  68 + <el-image style="width:60px;height:60px;cursor:pointer" :src="scope.row.facePath || '/img/noPhoto.jpg'"
  69 + :preview-src-list="[scope.row.facePath]" fit="cover" />
  70 + </template>
  71 + </el-table-column>
  72 + <el-table-column prop="inoutId" :label="$t('accessControlInout.table.id')" align="center" />
  73 + <el-table-column prop="machineName" :label="$t('accessControlInout.table.machineName')" align="center" />
  74 + <el-table-column prop="machineCode" :label="$t('accessControlInout.table.machineCode')" align="center" />
  75 + <el-table-column prop="name" :label="$t('accessControlInout.table.userName')" align="center" />
  76 + <el-table-column prop="openTypeCd" :label="$t('accessControlInout.table.openType')" align="center">
  77 + <template slot-scope="scope">
  78 + {{ scope.row.openTypeCd === '1000' ? $t('accessControlInout.openType.face') :
  79 + $t('accessControlInout.openType.other') }}
  80 + </template>
  81 + </el-table-column>
  82 + <el-table-column prop="tel" :label="$t('accessControlInout.table.tel')" align="center" />
  83 + <el-table-column prop="idCard" :label="$t('accessControlInout.table.idCard')" align="center" />
  84 + <el-table-column prop="similar" :label="$t('accessControlInout.table.similar')" align="center" />
  85 + <el-table-column prop="state" :label="$t('accessControlInout.table.state')" align="center">
  86 + <template slot-scope="scope">
  87 + {{ scope.row.state === 'C' ? $t('accessControlInout.state.success') : $t('accessControlInout.state.fail')
  88 + }}
  89 + </template>
  90 + </el-table-column>
  91 + <el-table-column prop="createTime" :label="$t('accessControlInout.table.createTime')" align="center" />
  92 + </el-table>
  93 + <el-pagination style="margin-top:20px;text-align:right" :current-page.sync="page.current"
  94 + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" :total="page.total"
  95 + layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  96 + @current-change="handleCurrentChange" />
  97 + </el-card>
  98 + </el-col>
  99 + </el-row>
  100 + </div>
  101 +</template>
  102 +
  103 +<script>
  104 +import { listAccessControlInouts, listAccessControls } from '@/api/machine/accessControlInoutApi'
  105 +import { getCommunityId } from '@/api/community/communityApi'
  106 +
  107 +export default {
  108 + name: 'AccessControlInoutList',
  109 + data() {
  110 + return {
  111 + loading: false,
  112 + communityId: '',
  113 + accessControlInoutInfo: {
  114 + accessControlInouts: [],
  115 + accessControls: [],
  116 + openTypeCds: [
  117 + { openTypeName: this.$t('accessControlInout.openType.all'), openTypeCd: '' },
  118 + { openTypeName: this.$t('accessControlInout.openType.face'), openTypeCd: '1000' },
  119 + { openTypeName: this.$t('accessControlInout.openType.key'), openTypeCd: '2000' },
  120 + { openTypeName: this.$t('accessControlInout.openType.qrcode'), openTypeCd: '3000' },
  121 + { openTypeName: this.$t('accessControlInout.openType.password'), openTypeCd: '4000' }
  122 + ],
  123 + total: 0,
  124 + records: 1,
  125 + conditions: {
  126 + machineId: '',
  127 + name: '',
  128 + openTypeCd: '',
  129 + tel: '',
  130 + state: '',
  131 + queryStartTime: '',
  132 + queryEndTime: '',
  133 + iotApiCode: 'listAccessControlInoutBmoImpl',
  134 + page: 1,
  135 + row: 10
  136 + }
  137 + },
  138 + page: {
  139 + current: 1,
  140 + size: 10,
  141 + total: 0
  142 + }
  143 + }
  144 + },
  145 + created() {
  146 + this.communityId = getCommunityId()
  147 + this._listAccessControls()
  148 + this._listAccessControlInouts(this.page.current, this.page.size)
  149 + },
  150 + methods: {
  151 + async _listAccessControlInouts(page, rows) {
  152 + try {
  153 + this.loading = true
  154 + this.accessControlInoutInfo.conditions.page = page
  155 + this.accessControlInoutInfo.conditions.row = rows
  156 + this.accessControlInoutInfo.conditions.communityId = this.communityId
  157 +
  158 + const { data, total } = await listAccessControlInouts(this.accessControlInoutInfo.conditions)
  159 + this.accessControlInoutInfo.accessControlInouts = data
  160 + this.page.total = total
  161 + } catch (error) {
  162 + console.error('获取门禁进出记录失败:', error)
  163 + } finally {
  164 + this.loading = false
  165 + }
  166 + },
  167 + async _listAccessControls() {
  168 + try {
  169 + const params = {
  170 + page: 1,
  171 + row: 100,
  172 + communityId: this.communityId,
  173 + iotApiCode: 'listAccessControlBmoImpl'
  174 + }
  175 + const { data } = await listAccessControls(params)
  176 + this.accessControlInoutInfo.accessControls = data
  177 + } catch (error) {
  178 + console.error('获取门禁设备失败:', error)
  179 + }
  180 + },
  181 + _queryAccessControlInoutMethod() {
  182 + this.page.current = 1
  183 + this._listAccessControlInouts(this.page.current, this.page.size)
  184 + },
  185 + swatchOpenTypeCd(openType) {
  186 + this.accessControlInoutInfo.conditions.openTypeCd = openType.openTypeCd
  187 + this._queryAccessControlInoutMethod()
  188 + },
  189 + handleSizeChange(val) {
  190 + this.page.size = val
  191 + this._listAccessControlInouts(this.page.current, this.page.size)
  192 + },
  193 + handleCurrentChange(val) {
  194 + this.page.current = val
  195 + this._listAccessControlInouts(this.page.current, this.page.size)
  196 + }
  197 + }
  198 +}
  199 +</script>
  200 +
  201 +<style lang="scss" scoped>
  202 +.access-control-inout-container {
  203 + padding: 20px;
  204 +
  205 + .tree-card {
  206 + height: 100%;
  207 +
  208 + .tree-list {
  209 + list-style: none;
  210 + padding: 0;
  211 + margin: 0;
  212 +
  213 + li {
  214 + padding: 10px;
  215 + cursor: pointer;
  216 + text-align: center;
  217 + margin-bottom: 5px;
  218 + border-radius: 4px;
  219 +
  220 + &:hover {
  221 + background-color: #f5f7fa;
  222 + }
  223 +
  224 + &.selected {
  225 + background-color: #409eff;
  226 + color: #fff;
  227 + }
  228 + }
  229 + }
  230 + }
  231 +
  232 + .search-card {
  233 + margin-bottom: 20px;
  234 + }
  235 +}
  236 +</style>
0 237 \ No newline at end of file
... ...
src/views/machine/machinePrinterManageLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + machinePrinterManage: {
  4 + search: {
  5 + title: 'Search Conditions',
  6 + machineName: 'Machine Name',
  7 + machineCode: 'Machine Code'
  8 + },
  9 + list: {
  10 + title: 'Cloud Printer List'
  11 + },
  12 + table: {
  13 + machineId: 'Machine ID',
  14 + machineName: 'Machine Name',
  15 + machineCode: 'Machine Code',
  16 + implBeanName: 'Manufacturer'
  17 + },
  18 + form: {
  19 + machineName: 'Machine Name',
  20 + machineCode: 'Machine Code',
  21 + implBean: 'Manufacturer',
  22 + machineNamePlaceholder: 'Please enter machine name',
  23 + machineCodePlaceholder: 'Please enter machine code',
  24 + implBeanPlaceholder: 'Please select manufacturer'
  25 + },
  26 + validate: {
  27 + machineIdRequired: 'Machine ID is required',
  28 + machineNameRequired: 'Machine name is required',
  29 + machineNameMaxLength: 'Machine name cannot exceed 200 characters',
  30 + machineCodeRequired: 'Machine code is required',
  31 + machineCodeMaxLength: 'Machine code cannot exceed 30 characters',
  32 + implBeanRequired: 'Manufacturer is required',
  33 + implBeanMaxLength: 'Manufacturer cannot exceed 30 characters'
  34 + },
  35 + message: {
  36 + addSuccess: 'Add successfully',
  37 + editSuccess: 'Edit successfully',
  38 + deleteSuccess: 'Delete successfully',
  39 + fetchError: 'Failed to fetch data'
  40 + },
  41 + add: {
  42 + title: 'Add Printer'
  43 + },
  44 + edit: {
  45 + title: 'Edit Printer'
  46 + },
  47 + delete: {
  48 + title: 'Delete Confirmation',
  49 + confirmText: 'Are you sure to delete this cloud printer?'
  50 + }
  51 + }
  52 + },
  53 + zh: {
  54 + machinePrinterManage: {
  55 + search: {
  56 + title: '查询条件',
  57 + machineName: '设备名称',
  58 + machineCode: '设备编码'
  59 + },
  60 + list: {
  61 + title: '云打印机列表'
  62 + },
  63 + table: {
  64 + machineId: '设备编号',
  65 + machineName: '设备名称',
  66 + machineCode: '设备编码',
  67 + implBeanName: '厂家'
  68 + },
  69 + form: {
  70 + machineName: '设备名称',
  71 + machineCode: '设备编码',
  72 + implBean: '厂家',
  73 + machineNamePlaceholder: '请输入设备名称',
  74 + machineCodePlaceholder: '请输入设备编码',
  75 + implBeanPlaceholder: '请选择厂家'
  76 + },
  77 + validate: {
  78 + machineIdRequired: '设备编号不能为空',
  79 + machineNameRequired: '设备名称不能为空',
  80 + machineNameMaxLength: '设备名称不能超过200个字符',
  81 + machineCodeRequired: '设备编码不能为空',
  82 + machineCodeMaxLength: '设备编码不能超过30个字符',
  83 + implBeanRequired: '厂家不能为空',
  84 + implBeanMaxLength: '厂家不能超过30个字符'
  85 + },
  86 + message: {
  87 + addSuccess: '添加成功',
  88 + editSuccess: '修改成功',
  89 + deleteSuccess: '删除成功',
  90 + fetchError: '获取数据失败'
  91 + },
  92 + add: {
  93 + title: '添加打印机'
  94 + },
  95 + edit: {
  96 + title: '修改打印机'
  97 + },
  98 + delete: {
  99 + title: '删除确认',
  100 + confirmText: '确定删除该云打印机吗?'
  101 + }
  102 + }
  103 + }
  104 +}
0 105 \ No newline at end of file
... ...
src/views/machine/machinePrinterManageList.vue 0 → 100644
  1 +<template>
  2 + <div class="machine-printer-manage-container">
  3 + <!-- 查询条件 -->
  4 + <el-card class="search-wrapper">
  5 + <div slot="header" class="flex justify-between">
  6 + <span>{{ $t('machinePrinterManage.search.title') }}</span>
  7 + </div>
  8 + <el-row :gutter="20">
  9 + <el-col :span="6">
  10 + <el-input v-model="searchForm.machineName" :placeholder="$t('machinePrinterManage.search.machineName')"
  11 + clearable />
  12 + </el-col>
  13 + <el-col :span="6">
  14 + <el-input v-model="searchForm.machineCode" :placeholder="$t('machinePrinterManage.search.machineCode')"
  15 + clearable />
  16 + </el-col>
  17 + <el-col :span="4">
  18 + <el-button type="primary" @click="handleSearch">
  19 + {{ $t('common.search') }}
  20 + </el-button>
  21 + <el-button @click="handleReset">
  22 + {{ $t('common.reset') }}
  23 + </el-button>
  24 + </el-col>
  25 + </el-row>
  26 + </el-card>
  27 +
  28 + <!-- 列表 -->
  29 + <el-card class="list-wrapper">
  30 + <div slot="header" class="flex justify-between">
  31 + <span>{{ $t('machinePrinterManage.list.title') }}</span>
  32 + <div class="header-right">
  33 + <el-button type="primary" size="small" @click="handleAdd">
  34 + {{ $t('common.add') }}
  35 + </el-button>
  36 + <el-button type="primary" size="small" @click="handleShowDoc">
  37 + {{ $t('common.document') }}
  38 + </el-button>
  39 + </div>
  40 + </div>
  41 +
  42 + <el-table v-loading="loading" :data="tableData" border style="width: 100%">
  43 + <el-table-column prop="machineId" :label="$t('machinePrinterManage.table.machineId')" align="center" />
  44 + <el-table-column prop="machineName" :label="$t('machinePrinterManage.table.machineName')" align="center" />
  45 + <el-table-column prop="machineCode" :label="$t('machinePrinterManage.table.machineCode')" align="center" />
  46 + <el-table-column prop="implBeanName" :label="$t('machinePrinterManage.table.implBeanName')" align="center" />
  47 + <el-table-column :label="$t('common.operation')" align="center" width="200">
  48 + <template slot-scope="scope">
  49 + <el-button size="mini" type="primary" @click="handleEdit(scope.row)">
  50 + {{ $t('common.edit') }}
  51 + </el-button>
  52 + <el-button size="mini" type="danger" @click="handleDelete(scope.row)">
  53 + {{ $t('common.delete') }}
  54 + </el-button>
  55 + </template>
  56 + </el-table-column>
  57 + </el-table>
  58 +
  59 + <el-pagination :current-page="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size"
  60 + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  61 + @current-change="handleCurrentChange" />
  62 + </el-card>
  63 +
  64 + <!-- 子组件 -->
  65 + <add-machine-printer ref="addMachinePrinter" @success="handleSuccess" />
  66 + <edit-machine-printer ref="editMachinePrinter" @success="handleSuccess" />
  67 + <delete-machine-printer ref="deleteMachinePrinter" @success="handleSuccess" />
  68 + </div>
  69 +</template>
  70 +
  71 +<script>
  72 +import { listMachinePrinter } from '@/api/machine/machinePrinterManageApi'
  73 +import { getCommunityId } from '@/api/community/communityApi'
  74 +import AddMachinePrinter from '@/components/machine/addMachinePrinter'
  75 +import EditMachinePrinter from '@/components/machine/editMachinePrinter'
  76 +import DeleteMachinePrinter from '@/components/machine/deleteMachinePrinter'
  77 +
  78 +export default {
  79 + name: 'MachinePrinterManageList',
  80 + components: {
  81 + AddMachinePrinter,
  82 + EditMachinePrinter,
  83 + DeleteMachinePrinter
  84 + },
  85 + data() {
  86 + return {
  87 + loading: false,
  88 + searchForm: {
  89 + machineName: '',
  90 + machineCode: '',
  91 + communityId: getCommunityId()
  92 + },
  93 + tableData: [],
  94 + page: {
  95 + current: 1,
  96 + size: 10,
  97 + total: 0
  98 + }
  99 + }
  100 + },
  101 + created() {
  102 + this.getList()
  103 + },
  104 + methods: {
  105 + async getList() {
  106 + try {
  107 + this.loading = true
  108 + const params = {
  109 + page: this.page.current,
  110 + row: this.page.size,
  111 + ...this.searchForm
  112 + }
  113 + const { data, total } = await listMachinePrinter(params)
  114 + this.tableData = data
  115 + this.page.total = total
  116 + } catch (error) {
  117 + this.$message.error(this.$t('machinePrinterManage.fetchError'))
  118 + } finally {
  119 + this.loading = false
  120 + }
  121 + },
  122 + handleSearch() {
  123 + this.page.current = 1
  124 + this.getList()
  125 + },
  126 + handleReset() {
  127 + this.searchForm = {
  128 + machineName: '',
  129 + machineCode: '',
  130 + communityId: getCommunityId()
  131 + }
  132 + this.handleSearch()
  133 + },
  134 + handleAdd() {
  135 + this.$refs.addMachinePrinter.open()
  136 + },
  137 + handleEdit(row) {
  138 + this.$refs.editMachinePrinter.open(row)
  139 + },
  140 + handleDelete(row) {
  141 + this.$refs.deleteMachinePrinter.open(row)
  142 + },
  143 + handleShowDoc() {
  144 + // 显示文档逻辑
  145 + },
  146 + handleSuccess() {
  147 + this.getList()
  148 + },
  149 + handleSizeChange(val) {
  150 + this.page.size = val
  151 + this.getList()
  152 + },
  153 + handleCurrentChange(val) {
  154 + this.page.current = val
  155 + this.getList()
  156 + }
  157 + }
  158 +}
  159 +</script>
  160 +
  161 +<style lang="scss" scoped>
  162 +.machine-printer-manage-container {
  163 + padding: 20px;
  164 +
  165 + .search-wrapper {
  166 + margin-bottom: 20px;
  167 +
  168 + .el-row {
  169 + margin-bottom: -20px;
  170 + }
  171 +
  172 + .el-col {
  173 + margin-bottom: 20px;
  174 + }
  175 + }
  176 +
  177 + .list-wrapper {
  178 + .header-right {
  179 + float: right;
  180 + }
  181 + }
  182 +
  183 + .el-pagination {
  184 + margin-top: 20px;
  185 + text-align: right;
  186 + }
  187 +}
  188 +</style>
0 189 \ No newline at end of file
... ...
src/views/machine/machineTranslateManageLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + machineTranslateManage: {
  4 + search: {
  5 + title: 'Search Conditions',
  6 + typeCd: 'Select Object Type',
  7 + selectType: 'Please select object type',
  8 + objId: 'Please enter object ID',
  9 + objName: 'Please enter object name'
  10 + },
  11 + list: {
  12 + title: 'IoT Synchronization'
  13 + },
  14 + table: {
  15 + objId: 'Object ID',
  16 + typeCd: 'Object Type',
  17 + objName: 'Object Name',
  18 + machineCmd: 'Command',
  19 + state: 'Status',
  20 + remark: 'Remark',
  21 + updateTime: 'Sync Time',
  22 + operation: 'Operation'
  23 + },
  24 + button: {
  25 + resync: 'Resync'
  26 + },
  27 + state: {
  28 + notSync: 'Not Synced',
  29 + synced: 'Synced'
  30 + },
  31 + type: {
  32 + owner: 'Owner',
  33 + community: 'Community',
  34 + keyInfo: 'Key Info',
  35 + visitorInfo: 'Visitor Info',
  36 + staffFace: 'Staff Face',
  37 + carInfo: 'Car Info',
  38 + deviceInfo: 'Device Info'
  39 + },
  40 + add: {
  41 + title: 'Add Device Sync',
  42 + machineCode: 'Device Code',
  43 + machineCodePlaceholder: 'Required, please enter device code',
  44 + machineId: 'Device ID',
  45 + machineIdPlaceholder: 'Required, please enter device ID',
  46 + typeCd: 'Object Type',
  47 + typeCdPlaceholder: 'Required, please select object type',
  48 + objName: 'Object Name',
  49 + objNamePlaceholder: 'Required, please enter object name',
  50 + objId: 'Object ID',
  51 + objIdPlaceholder: 'Required, please enter object ID',
  52 + state: 'Status',
  53 + statePlaceholder: 'Required, please select status'
  54 + },
  55 + edit: {
  56 + title: 'Resync',
  57 + machineCode: 'Device Code',
  58 + machineId: 'Device ID',
  59 + typeCd: 'Object Type',
  60 + objName: 'Object Name',
  61 + objId: 'Object ID'
  62 + },
  63 + validate: {
  64 + machineCodeRequired: 'Device code cannot be empty',
  65 + machineCodeMaxLength: 'Device code cannot exceed 30 characters',
  66 + machineIdRequired: 'Device ID cannot be empty',
  67 + typeCdRequired: 'Object type cannot be empty',
  68 + objNameRequired: 'Object name cannot be empty',
  69 + objIdRequired: 'Object ID cannot be empty',
  70 + objIdNumber: 'Object ID must be a number',
  71 + stateRequired: 'Status cannot be empty'
  72 + },
  73 + message: {
  74 + addSuccess: 'Add success',
  75 + resyncSuccess: 'Resync success',
  76 + fetchError: 'Failed to fetch data'
  77 + }
  78 + }
  79 + },
  80 + zh: {
  81 + machineTranslateManage: {
  82 + search: {
  83 + title: '查询条件',
  84 + typeCd: '请选择对象类型',
  85 + selectType: '请选择对象类型',
  86 + objId: '请输入对象ID',
  87 + objName: '请输入对象名称'
  88 + },
  89 + list: {
  90 + title: '物联网同步'
  91 + },
  92 + table: {
  93 + objId: '对象ID',
  94 + typeCd: '对象类型',
  95 + objName: '对象名称',
  96 + machineCmd: '指令',
  97 + state: '状态',
  98 + remark: '说明',
  99 + updateTime: '同步时间',
  100 + operation: '操作'
  101 + },
  102 + button: {
  103 + resync: '重新同步'
  104 + },
  105 + state: {
  106 + notSync: '未同步',
  107 + synced: '已同步'
  108 + },
  109 + type: {
  110 + owner: '业主',
  111 + community: '小区',
  112 + keyInfo: '钥匙信息',
  113 + visitorInfo: '访客信息',
  114 + staffFace: '员工人脸',
  115 + carInfo: '车辆信息',
  116 + deviceInfo: '设备信息'
  117 + },
  118 + add: {
  119 + title: '添加设备同步',
  120 + machineCode: '设备编码',
  121 + machineCodePlaceholder: '必填,请填写设备编码',
  122 + machineId: '设备ID',
  123 + machineIdPlaceholder: '必填,请填写设备ID',
  124 + typeCd: '对象类型',
  125 + typeCdPlaceholder: '必填,请选择对象类型',
  126 + objName: '对象名称',
  127 + objNamePlaceholder: '必填,请填写对象名称',
  128 + objId: '对象ID',
  129 + objIdPlaceholder: '必填,请填写对象ID',
  130 + state: '状态',
  131 + statePlaceholder: '必填,请选择状态'
  132 + },
  133 + edit: {
  134 + title: '重新同步',
  135 + machineCode: '设备编码',
  136 + machineId: '设备ID',
  137 + typeCd: '对象类型',
  138 + objName: '对象名称',
  139 + objId: '对象ID'
  140 + },
  141 + validate: {
  142 + machineCodeRequired: '设备编码不能为空',
  143 + machineCodeMaxLength: '设备编码不能超过30位',
  144 + machineIdRequired: '设备ID不能为空',
  145 + typeCdRequired: '对象类型不能为空',
  146 + objNameRequired: '对象名称不能为空',
  147 + objIdRequired: '对象ID不能为空',
  148 + objIdNumber: '对象ID必须为数字',
  149 + stateRequired: '状态不能为空'
  150 + },
  151 + message: {
  152 + addSuccess: '添加成功',
  153 + resyncSuccess: '重新同步成功',
  154 + fetchError: '获取数据失败'
  155 + }
  156 + }
  157 + }
  158 +}
0 159 \ No newline at end of file
... ...
src/views/machine/machineTranslateManageList.vue 0 → 100644
  1 +<template>
  2 + <div class="machine-translate-manage-container">
  3 + <!-- 查询条件 -->
  4 + <el-card class="search-wrapper">
  5 + <div slot="header" class="flex justify-between">
  6 + <span>{{ $t('machineTranslateManage.search.title') }}</span>
  7 + <el-button style="float: right; padding: 3px 0" type="text" @click="toggleMoreCondition">
  8 + {{ machineTranslateManageInfo.moreCondition ? $t('common.hide') : $t('common.more') }}
  9 + </el-button>
  10 + </div>
  11 + <el-row :gutter="20">
  12 + <el-col :span="6">
  13 + <el-select v-model="machineTranslateManageInfo.conditions.typeCd"
  14 + :placeholder="$t('machineTranslateManage.search.typeCd')" style="width: 100%">
  15 + <el-option :label="$t('machineTranslateManage.search.selectType')" value="" />
  16 + <el-option v-for="(item, index) in machineTranslateManageInfo.typeCds" :key="index" :label="item.name"
  17 + :value="item.statusCd" />
  18 + </el-select>
  19 + </el-col>
  20 + <el-col :span="6">
  21 + <el-input v-model="machineTranslateManageInfo.conditions.objId"
  22 + :placeholder="$t('machineTranslateManage.search.objId')" />
  23 + </el-col>
  24 + <el-col :span="6">
  25 + <el-input v-model="machineTranslateManageInfo.conditions.objName"
  26 + :placeholder="$t('machineTranslateManage.search.objName')" />
  27 + </el-col>
  28 + <el-col :span="6">
  29 + <el-button type="primary" @click="queryMachineTranslateMethod">
  30 + {{ $t('common.search') }}
  31 + </el-button>
  32 + <el-button @click="resetMachineTranslateMethod">
  33 + {{ $t('common.reset') }}
  34 + </el-button>
  35 + </el-col>
  36 + </el-row>
  37 + </el-card>
  38 +
  39 + <!-- 数据列表 -->
  40 + <el-card class="list-wrapper">
  41 + <div slot="header" class="flex justify-between">
  42 + <span>{{ $t('machineTranslateManage.list.title') }}</span>
  43 + </div>
  44 + <el-table v-loading="loading" :data="machineTranslateManageInfo.machineTranslates" border style="width: 100%">
  45 + <el-table-column prop="objId" :label="$t('machineTranslateManage.table.objId')" align="center" />
  46 + <el-table-column prop="typeCdName" :label="$t('machineTranslateManage.table.typeCd')" align="center" />
  47 + <el-table-column prop="objName" :label="$t('machineTranslateManage.table.objName')" align="center" />
  48 + <el-table-column prop="machineCmdName" :label="$t('machineTranslateManage.table.machineCmd')" align="center" />
  49 + <el-table-column prop="stateName" :label="$t('machineTranslateManage.table.state')" align="center" />
  50 + <el-table-column prop="remark" :label="$t('machineTranslateManage.table.remark')" align="center" width="80" />
  51 + <el-table-column prop="updateTime" :label="$t('machineTranslateManage.table.updateTime')" align="center" />
  52 + <el-table-column :label="$t('common.operation')" align="center" width="120">
  53 + <template slot-scope="scope">
  54 + <el-button v-if="scope.row.state !== '20000'" size="mini" type="primary"
  55 + @click="openEditMachineTranslateModel(scope.row)">
  56 + {{ $t('machineTranslateManage.button.resync') }}
  57 + </el-button>
  58 + </template>
  59 + </el-table-column>
  60 + </el-table>
  61 +
  62 + <el-pagination :current-page.sync="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size"
  63 + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  64 + @current-change="handleCurrentChange" />
  65 + </el-card>
  66 +
  67 + <!-- 组件 -->
  68 + <add-machine-translate ref="addMachineTranslate" @success="handleSuccess" />
  69 + <edit-machine-translate ref="editMachineTranslate" @success="handleSuccess" />
  70 + </div>
  71 +</template>
  72 +
  73 +<script>
  74 +import { listMachineTranslates } from '@/api/machine/machineTranslateManageApi'
  75 +import { getDict } from '@/api/community/communityApi'
  76 +import { getCommunityId } from '@/api/community/communityApi'
  77 +import AddMachineTranslate from '@/components/machine/addMachineTranslate'
  78 +import EditMachineTranslate from '@/components/machine/editMachineTranslate'
  79 +
  80 +export default {
  81 + name: 'MachineTranslateManageList',
  82 + components: {
  83 + AddMachineTranslate,
  84 + EditMachineTranslate
  85 + },
  86 + data() {
  87 + return {
  88 + loading: false,
  89 + communityId: '',
  90 + machineTranslateManageInfo: {
  91 + machineTranslates: [],
  92 + total: 0,
  93 + records: 1,
  94 + moreCondition: false,
  95 + typeCds: [],
  96 + conditions: {
  97 + typeCd: '',
  98 + objName: '',
  99 + objId: '',
  100 + communityId: ''
  101 + }
  102 + },
  103 + page: {
  104 + current: 1,
  105 + size: 10,
  106 + total: 0
  107 + }
  108 + }
  109 + },
  110 + created() {
  111 + this.communityId = getCommunityId()
  112 + this.machineTranslateManageInfo.conditions.communityId = this.communityId
  113 + this.initData()
  114 + },
  115 + methods: {
  116 + async initData() {
  117 + try {
  118 + await this.getDictData()
  119 + this.listMachineTranslates()
  120 + } catch (error) {
  121 + console.error('初始化数据失败:', error)
  122 + }
  123 + },
  124 + async getDictData() {
  125 + try {
  126 + const data = await getDict('machine_translate', 'type_cd')
  127 + this.machineTranslateManageInfo.typeCds = data
  128 + } catch (error) {
  129 + console.error('获取字典数据失败:', error)
  130 + }
  131 + },
  132 + async listMachineTranslates() {
  133 + try {
  134 + this.loading = true
  135 + const params = {
  136 + page: this.page.current,
  137 + row: this.page.size,
  138 + ...this.machineTranslateManageInfo.conditions
  139 + }
  140 + const { data, total } = await listMachineTranslates(params)
  141 + this.machineTranslateManageInfo.machineTranslates = data
  142 + this.page.total = total
  143 + } catch (error) {
  144 + this.$message.error(this.$t('machineTranslateManage.fetchError'))
  145 + } finally {
  146 + this.loading = false
  147 + }
  148 + },
  149 + queryMachineTranslateMethod() {
  150 + this.page.current = 1
  151 + this.listMachineTranslates()
  152 + },
  153 + resetMachineTranslateMethod() {
  154 + this.machineTranslateManageInfo.conditions = {
  155 + typeCd: '',
  156 + objName: '',
  157 + objId: '',
  158 + communityId: this.communityId
  159 + }
  160 + this.listMachineTranslates()
  161 + },
  162 + toggleMoreCondition() {
  163 + this.machineTranslateManageInfo.moreCondition = !this.machineTranslateManageInfo.moreCondition
  164 + },
  165 + openEditMachineTranslateModel(row) {
  166 + this.$refs.editMachineTranslate.open(row)
  167 + },
  168 + handleSuccess() {
  169 + this.listMachineTranslates()
  170 + },
  171 + handleSizeChange(val) {
  172 + this.page.size = val
  173 + this.listMachineTranslates()
  174 + },
  175 + handleCurrentChange(val) {
  176 + this.page.current = val
  177 + this.listMachineTranslates()
  178 + }
  179 + }
  180 +}
  181 +</script>
  182 +
  183 +<style lang="scss" scoped>
  184 +.machine-translate-manage-container {
  185 + padding: 20px;
  186 +
  187 + .search-wrapper {
  188 + margin-bottom: 20px;
  189 +
  190 + .el-row {
  191 + margin-bottom: 20px;
  192 + }
  193 + }
  194 +
  195 + .list-wrapper {
  196 + margin-bottom: 20px;
  197 +
  198 + .el-pagination {
  199 + margin-top: 20px;
  200 + text-align: right;
  201 + }
  202 + }
  203 +}
  204 +</style>
0 205 \ No newline at end of file
... ...
src/views/machine/printerRuleLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + printerRule: {
  4 + title: 'Printer Rule Management',
  5 + addTitle: 'Add Printer Rule',
  6 + editTitle: 'Edit Printer Rule',
  7 + deleteTitle: 'Delete Printer Rule',
  8 + ruleName: 'Rule Name',
  9 + ruleNamePlaceholder: 'Please enter rule name',
  10 + ruleNameRequired: 'Rule name is required',
  11 + ruleNameMaxLength: 'Rule name cannot exceed 64 characters',
  12 + remark: 'Remark',
  13 + remarkPlaceholder: 'Please enter remark',
  14 + remarkMaxLength: 'Remark cannot exceed 512 characters',
  15 + state: 'State',
  16 + deleteConfirm: 'Are you sure to delete this printer rule?',
  17 + tab: {
  18 + machine: 'Cloud Printer',
  19 + fees: 'Fee Auto Print',
  20 + repair: 'Repair Auto Print'
  21 + }
  22 + },
  23 + printerRuleMachine: {
  24 + title: 'Printer Machine Management',
  25 + addTitle: 'Add Printer Machine',
  26 + editTitle: 'Edit Printer Machine',
  27 + deleteTitle: 'Delete Printer Machine',
  28 + id: 'ID',
  29 + idPlaceholder: 'Please enter ID',
  30 + machineName: 'Printer Name',
  31 + machineNamePlaceholder: 'Please enter printer name',
  32 + machine: 'Printer',
  33 + machinePlaceholder: 'Please select printer',
  34 + machineRequired: 'Printer is required',
  35 + quantity: 'Quantity',
  36 + quantityPlaceholder: 'Please enter quantity',
  37 + quantityRequired: 'Quantity is required',
  38 + deleteConfirm: 'Are you sure to delete this printer machine?',
  39 + table: {
  40 + id: 'ID',
  41 + machineName: 'Printer Name',
  42 + quantity: 'Quantity'
  43 + }
  44 + },
  45 + printerRuleFees: {
  46 + title: 'Fee Auto Print Management',
  47 + addTitle: 'Add Fee Auto Print',
  48 + deleteTitle: 'Delete Fee Auto Print',
  49 + id: 'ID',
  50 + idPlaceholder: 'Please enter ID',
  51 + feeName: 'Fee Name',
  52 + feeNamePlaceholder: 'Please enter fee name',
  53 + fee: 'Fee',
  54 + feePlaceholder: 'Please select fee',
  55 + feeRequired: 'Fee is required',
  56 + deleteConfirm: 'Are you sure to delete this fee auto print?',
  57 + table: {
  58 + id: 'ID',
  59 + feeName: 'Fee Name'
  60 + }
  61 + },
  62 + printerRuleRepair: {
  63 + title: 'Repair Auto Print Management',
  64 + addTitle: 'Add Repair Auto Print',
  65 + deleteTitle: 'Delete Repair Auto Print',
  66 + id: 'ID',
  67 + idPlaceholder: 'Please enter ID',
  68 + repairType: 'Repair Type',
  69 + repairTypePlaceholder: 'Please enter repair type',
  70 + repairTypeRequired: 'Repair type is required',
  71 + deleteConfirm: 'Are you sure to delete this repair auto print?',
  72 + table: {
  73 + id: 'ID',
  74 + repairType: 'Repair Type'
  75 + }
  76 + }
  77 + },
  78 + zh: {
  79 + printerRule: {
  80 + title: '打印机规则管理',
  81 + addTitle: '添加打印机规则',
  82 + editTitle: '修改打印机规则',
  83 + deleteTitle: '删除打印机规则',
  84 + ruleName: '规则名称',
  85 + ruleNamePlaceholder: '请输入规则名称',
  86 + ruleNameRequired: '规则名称不能为空',
  87 + ruleNameMaxLength: '规则名称不能超过64个字符',
  88 + remark: '备注',
  89 + remarkPlaceholder: '请输入备注',
  90 + remarkMaxLength: '备注不能超过512个字符',
  91 + state: '状态',
  92 + deleteConfirm: '确定删除此打印机规则吗?',
  93 + tab: {
  94 + machine: '云打印机',
  95 + fees: '缴费自动打印',
  96 + repair: '报修自动打印'
  97 + }
  98 + },
  99 + printerRuleMachine: {
  100 + title: '打印机机器管理',
  101 + addTitle: '添加打印机机器',
  102 + editTitle: '修改打印机机器',
  103 + deleteTitle: '删除打印机机器',
  104 + id: '编号',
  105 + idPlaceholder: '请输入编号',
  106 + machineName: '打印机名称',
  107 + machineNamePlaceholder: '请输入打印机名称',
  108 + machine: '打印机',
  109 + machinePlaceholder: '请选择打印机',
  110 + machineRequired: '打印机不能为空',
  111 + quantity: '打印数量',
  112 + quantityPlaceholder: '请输入打印数量',
  113 + quantityRequired: '打印数量不能为空',
  114 + deleteConfirm: '确定删除此打印机机器吗?',
  115 + table: {
  116 + id: '编号',
  117 + machineName: '打印机名称',
  118 + quantity: '打印数量'
  119 + }
  120 + },
  121 + printerRuleFees: {
  122 + title: '缴费自动打印管理',
  123 + addTitle: '添加缴费自动打印',
  124 + deleteTitle: '删除缴费自动打印',
  125 + id: '编号',
  126 + idPlaceholder: '请输入编号',
  127 + feeName: '费用名称',
  128 + feeNamePlaceholder: '请输入费用名称',
  129 + fee: '费用',
  130 + feePlaceholder: '请选择费用',
  131 + feeRequired: '费用不能为空',
  132 + deleteConfirm: '确定删除此缴费自动打印吗?',
  133 + table: {
  134 + id: '编号',
  135 + feeName: '费用名称'
  136 + }
  137 + },
  138 + printerRuleRepair: {
  139 + title: '报修自动打印管理',
  140 + addTitle: '添加报修自动打印',
  141 + deleteTitle: '删除报修自动打印',
  142 + id: '编号',
  143 + idPlaceholder: '请输入编号',
  144 + repairType: '报修类型',
  145 + repairTypePlaceholder: '请输入报修类型',
  146 + repairTypeRequired: '报修类型不能为空',
  147 + deleteConfirm: '确定删除此报修自动打印吗?',
  148 + table: {
  149 + id: '编号',
  150 + repairType: '报修类型'
  151 + }
  152 + }
  153 + }
  154 +}
0 155 \ No newline at end of file
... ...
src/views/machine/printerRuleList.vue 0 → 100644
  1 +<template>
  2 + <div class="printer-rule-container">
  3 + <el-row :gutter="20">
  4 + <el-col :span="4">
  5 + <printer-rule-div @switch-rule="handleSwitchRule" />
  6 + </el-col>
  7 + <el-col :span="20">
  8 + <el-card class="box-card">
  9 + <div slot="header" class="text-left">
  10 + <h5>{{ printerRuleInfo.curPrinterRule.ruleName }}</h5>
  11 + <div class="role-context">{{ printerRuleInfo.curPrinterRule.remark }}</div>
  12 + </div>
  13 + <div class="role-menu flex justify-start">
  14 + <el-button :type="printerRuleInfo.tabName === 'printerRuleMachine' ? 'primary' : 'text'"
  15 + @click="_changePrinterRuleTab('printerRuleMachine')">
  16 + {{ $t('printerRule.tab.machine') }}
  17 + </el-button>
  18 + <el-button :type="printerRuleInfo.tabName === 'printerRuleFees' ? 'primary' : 'text'"
  19 + @click="_changePrinterRuleTab('printerRuleFees')">
  20 + {{ $t('printerRule.tab.fees') }}
  21 + </el-button>
  22 + <el-button :type="printerRuleInfo.tabName === 'printerRuleRepair' ? 'primary' : 'text'"
  23 + @click="_changePrinterRuleTab('printerRuleRepair')">
  24 + {{ $t('printerRule.tab.repair') }}
  25 + </el-button>
  26 + </div>
  27 +
  28 + <div v-if="printerRuleInfo.tabName === 'printerRuleMachine'">
  29 + <printer-rule-machine />
  30 + </div>
  31 + <div v-if="printerRuleInfo.tabName === 'printerRuleFees'">
  32 + <printer-rule-fees />
  33 + </div>
  34 + <div v-if="printerRuleInfo.tabName === 'printerRuleRepair'">
  35 + <printer-rule-repair />
  36 + </div>
  37 + </el-card>
  38 + </el-col>
  39 + </el-row>
  40 +
  41 +
  42 + </div>
  43 +</template>
  44 +
  45 +<script>
  46 +import { getCommunityId } from '@/api/community/communityApi'
  47 +import PrinterRuleDiv from '@/components/machine/printerRuleDiv'
  48 +import PrinterRuleMachine from '@/components/machine/printerRuleMachine'
  49 +import PrinterRuleFees from '@/components/machine/printerRuleFees'
  50 +import PrinterRuleRepair from '@/components/machine/printerRuleRepair'
  51 +
  52 +
  53 +export default {
  54 + name: 'PrinterRuleList',
  55 + components: {
  56 + PrinterRuleDiv,
  57 + PrinterRuleMachine,
  58 + PrinterRuleFees,
  59 + PrinterRuleRepair,
  60 +
  61 + },
  62 + data() {
  63 + return {
  64 + printerRuleInfo: {
  65 + curPrinterRule: {},
  66 + tabName: 'printerRuleMachine'
  67 + },
  68 + communityId: ''
  69 + }
  70 + },
  71 + created() {
  72 + this.communityId = getCommunityId()
  73 + },
  74 + methods: {
  75 + handleSwitchRule(rule) {
  76 + this.printerRuleInfo.curPrinterRule = rule
  77 + this._changePrinterRuleTab('printerRuleMachine')
  78 + },
  79 + _changePrinterRuleTab(tabName) {
  80 + this.printerRuleInfo.tabName = tabName
  81 + setTimeout(() => {
  82 + this.$refs[tabName].open(this.printerRuleInfo.curPrinterRule.ruleId)
  83 + },500)
  84 +
  85 + },
  86 + handleSuccess() {
  87 + this.$refs.printerRuleDiv.refreshList()
  88 + }
  89 + }
  90 +}
  91 +</script>
  92 +
  93 +<style lang="scss" scoped>
  94 +.printer-rule-container {
  95 + padding: 20px;
  96 +
  97 + .line-x {
  98 + border-top: 1px solid #eee;
  99 + margin: 15px 0;
  100 + }
  101 +
  102 + .role-menu {
  103 + margin-bottom: 20px;
  104 +
  105 + .el-button {
  106 + margin-right: 15px;
  107 + }
  108 + }
  109 +
  110 + .role-title {
  111 + font-size: 18px;
  112 + font-weight: bold;
  113 + margin-bottom: 10px;
  114 + }
  115 +
  116 + .role-context {
  117 + color: #666;
  118 + font-size: 14px;
  119 + }
  120 +}
  121 +</style>
0 122 \ No newline at end of file
... ...