Browse Source

Merge remote-tracking branch 'origin/master'

zhangcl 2 tháng trước cách đây
mục cha
commit
c89e52bec3

+ 5 - 1
src/api/pms/modeltemplate/index.ts

@@ -23,6 +23,10 @@ export interface ModelTemplateAttrs {
 export const getAttrTemplateByModelCategoryId = async (params: any): Promise<any> => {
   return await request.get({ url: '/rq/iot-model-template/list-by-model-category-id?deviceCategoryId='+ params })
 }
+// 查询是否关联
+export const getIsRelated= async (deviceId: number | undefined) => {
+  return await request.get({ url: `/rq/iot-model-template/isRelated?deviceId=`+deviceId })
+}
 
 // 查询 设备属性模板 列表
 export const getModelTemplatePage = async (params: PageParam) => {
@@ -54,6 +58,6 @@ export const updateModelTemplateStatus = (id: number, status: number) => {
 }
 
 // 删除 设备属性模板
-export const deleteModelTemplate = async (id: number) => {
+export const deleteModelTemplate = async (id: number | undefined) => {
   return await request.delete({ url: '/rq/iot-model-template/delete?id=' + id })
 }

+ 2 - 1
src/config/axios/service.ts

@@ -180,9 +180,10 @@ service.interceptors.response.use(
 
       const requestUrl = response.config.url || ''
       // 判断是否包含rq/iot路径
-      if (requestUrl.includes('rq/')||requestUrl.includes('system/dict')) {
+      if (requestUrl.includes('rq/')||requestUrl.includes('system/dict')||requestUrl.includes('system/auth/get-permission-info')||requestUrl.includes('system/menu/list')) {
         const localeStore = useLocaleStore()
         const lang = localeStore.getCurrentLocale.lang
+        debugger
         if (data&& data.data) {
           if (data.data.list) {
             if (Array.isArray(data.data.list)) {

+ 34 - 1
src/locales/en.ts

@@ -270,7 +270,9 @@ export default {
     subitem: 'Subitem',
     formValidation: 'Form validation',
     verifyReset: 'Verify reset',
-    remark: 'Remark'
+    remark: 'Remark',
+    repeatDevice:'This category already exists, please select again',
+    relatedModel:'Template modification has been used, please do not delete'
   },
   watermark: {
     watermark: 'Watermark'
@@ -478,4 +480,35 @@ export default {
     dataLabel:'dataLabel',
     dataValue:'dataValue'
   },
+  operationFill:{
+    name:'OrderName',
+    nameHolder:'Please enter the work order name',
+    status:'OrderStatus',
+    createTime:'CreateTime',
+    start:'StartTime',
+    end:'EndTime',
+    search:'Search',
+    reset:'Reset',
+    add:'Add',
+    query:'Query',
+    operation:'Operation',
+    duty:'RP',
+    view:'View',
+    fill:'Fill'
+  },
+  operationFillForm:{
+    team:'Team',
+    sumTime:'CumulativeRunningTime',
+    confirm:'Confirm',
+    cancel:'Cancel',
+  },
+  modelTemplate:{
+    name:'TemplateName',
+    nameHolder:'Please enter a template name',
+    status:'Status',
+    createTime:'CreateTime',
+    ec:'EC',
+    update:'Update',
+    delete:'Delete'
+  },
 }

+ 35 - 2
src/locales/zh-CN.ts

@@ -71,7 +71,7 @@ export default {
     noPermission: `抱歉,您无权访问此页面。`,
     pageError: '抱歉,您访问的页面不存在。',
     networkError: '抱歉,服务器报告错误。',
-    returnToHome: '返回首页'
+    returnToHome: '返回首页',
   },
   permission: {
     hasPermission: `请设置操作权限标签值`,
@@ -272,7 +272,9 @@ export default {
     subitem: '子项',
     formValidation: '表单验证',
     verifyReset: '验证重置',
-    remark: '备注'
+    remark: '备注',
+    repeatDevice:'已存在该分类,请重新选择',
+    relatedModel:'改模板已被使用,请勿删除'
   },
   watermark: {
     watermark: '水印'
@@ -473,5 +475,36 @@ export default {
     dataLabel:'数据标签',
     dataValue:'数据键值'
   },
+  operationFill:{
+    name:'工单名',
+    nameHolder:'请输入工单名',
+    status:'工单状态',
+    createTime:'创建时间',
+    start:'开始日期',
+    end:'结束日期',
+    search:'搜索',
+    reset:'重置',
+    add:'新增',
+    query:'查询',
+    operation:'操作',
+    duty:'责任人',
+    view:'查看',
+    fill:'填写'
+  },
+  operationFillForm:{
+    team:'所属队伍',
+    sumTime:'累计运行时间',
+    confirm:'确定',
+    cancel:'取消',
+  },
+  modelTemplate:{
+    name:'模板名称',
+    nameHolder:'请输入模板名称',
+    status:'状态',
+    createTime:'创建时间',
+    ec:'设备分类名称',
+    update:'修改',
+    delete:'删除'
+  },
   'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
 }

+ 1 - 0
src/utils/dict.ts

@@ -270,6 +270,7 @@ export enum DICT_TYPE {
   PMS_MAIN_WORK_ORDER_TYPE = 'pms_main_work_order_type', // 保养工单类型
   PMS_MAIN_WORK_ORDER_RESULT = 'pms_main_work_order_result', // 保养工单状态
   RQ_IOT_ISCOLLECTION = 'rq_iot_isCollection',//是否数采
+  RQ_IOT_SUM = 'rq_iot_isSum',//是否累计
   PMS_ORDER_PROCESS_MODE = "pms_main_work_order_process_mode",  // 保养方式 0内部保养  1委外保养
   PMS_THING_MODEL_UNIT = 'pms_thing_model_unit', // pms属性模板单位
 }

+ 3 - 0
src/utils/langHelper.ts

@@ -21,6 +21,9 @@ export const langHelper = {
 
   transformObject<T extends Record<string, any>>(obj: T, currentLang: string): T {
     if (typeof obj === 'number') { return obj }
+    if (typeof obj === 'string') {
+      return this.getDisplayText(obj, currentLang)
+    }
     const result = { ...obj }
     for (const key in result) {
       if(Array.isArray(result[key])) {

+ 0 - 2
src/views/pms/device/monitor/TdDeviceInfo.vue

@@ -117,7 +117,6 @@ const topic = ref('')
 const labelSelect = (row) =>{
   topic.value = row.identifier
   topicName.value = row.modelName
-  debugger
   initChart()
 }
 
@@ -185,7 +184,6 @@ onMounted(async () => {
     })
     formLoading.value = false
     topic.value = specs.value[0].identifier
-    debugger
     topicName.value = specs.value[0].modelName
   })
   await initChart()

+ 0 - 1
src/views/pms/device/monitor/index.vue

@@ -323,7 +323,6 @@ const resetQuery = () => {
 /** 打开详情 */
 const { push } = useRouter()
 const openDetail = (id: number,ifInline: string, time:string, name:string,code:string, dept:string) => {
-  debugger
   if (time === null||time === undefined) {
     message.warning("没有数采数据")
     return

+ 16 - 16
src/views/pms/iotopeationfill/index.vue

@@ -15,19 +15,19 @@
         :inline="true"
         label-width="68px"
       >
-        <el-form-item label="工单名" prop="orderName">
+        <el-form-item :label="t('operationFill.name')" prop="orderName" style="margin-left: 15px">
           <el-input
             v-model="queryParams.orderName"
-            placeholder="请输入工单名"
+            :placeholder="t('operationFill.nameHolder')"
             clearable
             @keyup.enter="handleQuery"
             class="!w-240px"
           />
         </el-form-item>
-        <el-form-item label="工单状态" prop="orderStatus">
+        <el-form-item :label="t('operationFill.status')" prop="orderStatus">
           <el-select
             v-model="queryParams.orderStatus"
-            placeholder="工单状态"
+            :placeholder="t('operationFill.status')"
             clearable
             class="!w-240px"
           >
@@ -39,20 +39,20 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
+        <el-form-item :label="t('operationFill.createTime')" prop="createTime">
           <el-date-picker
             v-model="queryParams.createTime"
             value-format="YYYY-MM-DD HH:mm:ss"
             type="daterange"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
+            :start-placeholder="t('operationFill.start')"
+            :end-placeholder="t('operationFill.end')"
             :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
             class="!w-220px"
           />
         </el-form-item>
         <el-form-item>
-          <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-          <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+          <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" />{{t('operationFill.search')}}</el-button>
+          <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" />{{t('operationFill.query')}}</el-button>
 <!--          <el-button-->
 <!--            type="primary"-->
 <!--            plain-->
@@ -82,10 +82,10 @@
             {{ scope.$index + 1 }}
           </template>
         </el-table-column>
-        <el-table-column label="工单名称" align="center" prop="orderName" width="300"/>
-        <el-table-column label="责任人" align="center" prop="userName" />
+        <el-table-column :label="t('operationFill.name')" align="center" prop="orderName" width="300"/>
+        <el-table-column :label="t('operationFill.duty')" align="center" prop="userName" />
 <!--        <el-table-column label="工单类型" align="center" prop="orderType" />-->
-        <el-table-column label="工单状态" align="center" prop="orderStatus" >
+        <el-table-column :label="t('operationFill.status')" align="center" prop="orderStatus" >
           <template #default="scope">
             <dict-tag :type="DICT_TYPE.OPERATION_FILL_ORDER_STATUS" :value="scope.row.orderStatus" />
           </template>
@@ -98,7 +98,7 @@
           :formatter="dateFormatter"
           width="180px"
         />-->
-        <el-table-column label="操作" align="center" min-width="120px">
+        <el-table-column :label="t('operationFill.operation')" align="center" min-width="120px">
           <template #default="scope">
               <el-button
                 link
@@ -108,15 +108,15 @@
                 v-hasPermi="['rq:iot-opeation-fill:update']"
                 v-if="scope.row.orderStatus !== 1"
               >
-                填写
+                {{t('operationFill.fill')}}
               </el-button>
               <el-button
                 link
-                type="primary"
+                type="success"
                 @click="openWrite(scope.row.deptId+','+scope.row.userId+','+scope.row.createTime+','+scope.row.id+','+scope.row.orderStatus)"
                 v-else
               >
-                查看
+                {{t('operationFill.view')}}
               </el-button>
 
           </template>

+ 24 - 8
src/views/pms/iotopeationfill/index1.vue

@@ -13,7 +13,7 @@
           <span class="custom-label" v-if='item.isFill === 1' @click="openFill(item.deviceCategoryId,item.deviceId,item.deptId,item.deviceName,item.deviceCode)">
            {{item.deviceCode}} ({{ item.deviceName }})
           </span>
-          <span v-else  @click="openFill(item.deviceCategoryId,item.deviceId,item.deptId,item.deviceName,item.deviceCode)">
+          <span class="custom-label1" v-else  @click="openFill(item.deviceCategoryId,item.deviceId,item.deptId,item.deviceName,item.deviceCode)">
            {{item.deviceCode}} ({{ item.deviceName }})
           </span>
         </template>
@@ -21,18 +21,22 @@
           <el-form label-width="120px">
             <div style="margin-left: 24px">
               <el-form class="demo-form-inline" :inline="true">
-                <el-form-item label="所属队伍:">
-                  {{item.orgName}}
+                <el-form-item :label="t('operationFillForm.team')" class="custom-label1">
+                  <span style="text-decoration: underline;">
+                    {{item.orgName}}
+                  </span>
                 </el-form-item>
-                <el-form-item label="累计运行时间:">
+                <el-form-item :label="t('operationFillForm.sumTime')" class="custom-label1">
+                  <span style="text-decoration: underline;">
                   {{totalRunTime1}}h
+                  </span>
                 </el-form-item>
               </el-form>
             </div>
             <div v-for="(item,index) in attrList" :key="index">
                 <el-form-item :label='item.name' prop="deviceId"  >
                   <el-input
-                    v-if="item.isCollection===1"
+                    v-if="item.isCollection===1||fillStatus === '1'"
                     v-model="item.fillContent"
                     clearable
                     style="width: 200px"
@@ -47,8 +51,8 @@
                 </el-form-item>
             </div>
             <el-form-item>
-              <el-button type="primary" @click="getFillInfo" v-show="showStatus">确定</el-button>
-              <el-button type="info" @click="deleteFillInfo" v-show="showStatus">取消</el-button>
+              <el-button type="primary" @click="getFillInfo" v-show="showStatus">{{t('operationFillForm.confirm')}}</el-button>
+              <el-button type="info" @click="deleteFillInfo" v-show="showStatus">{{t('operationFillForm.cancel')}}</el-button>
             </el-form-item>
           </el-form>
         </div>
@@ -197,6 +201,7 @@ const getAttrList = async () => {
 
       if(item.name==='累计运行时间'){
         item.name = '当日运转时间'
+        totalRunTime1 = Number(item.totalRunTime).toFixed(2)
       }
       totalRunTime1 = Number(item.totalRunTime).toFixed(2)
       item.fillContent = Number(item.fillContent).toFixed(2)
@@ -214,6 +219,9 @@ const getAttrList = async () => {
 const getFillInfo = async () => {
   try {
     attrList.value.forEach(function (item,index){
+      if(item.isCollection===1){
+        item.totalRunTime = totalRunTime1;
+      }
       item.pointName = item.name;
       item.createTime = formatTimestamp(JSON.parse(deptId.split(",")[2].substring(0,10)));
       item.userId = deptId.split(",")[1];
@@ -305,7 +313,15 @@ onMounted(() => {
 }
 
 .custom-label {
-  color: green;
+  font-weight: 1000;
+  font-size: 17px;
+  padding: 0 10px;
+  color: forestgreen;
+}
+.custom-label1 {
+  font-weight: 1000;
+  font-size: 17px;
+  padding: 0 10px;
 }
 ::v-deep .el-step__icon {
   background-color: #409eff;

+ 29 - 8
src/views/pms/modeltemplate/TemplateForm.vue

@@ -19,6 +19,7 @@
               value-key="deviceCategoryId"
               placeholder="请选择设备分类"
               @node-click="handleDeviceCategoryTreeNodeClick"
+              clearable
             />
           </el-form-item>
         </el-col>
@@ -29,11 +30,11 @@
             <el-input v-model="formData.name" maxlength="32" placeholder="请输入模板名称" />
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+<!--        <el-col :span="12">
           <el-form-item label="模板编码" prop="code">
             <el-input v-model="formData.code" maxlength="50" placeholder="请输入模板编码" />
           </el-form-item>
-        </el-col>
+        </el-col>-->
       </el-row>
       <el-row>
         <el-col :span="24">
@@ -44,8 +45,11 @@
       </el-row>
     </el-form>
     <template #footer>
-      <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
+      <div v-show="showButton">
+        <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="dialogVisible = false">取 消</el-button>
+      </div>
+
     </template>
   </Dialog>
 </template>
@@ -62,7 +66,6 @@ defineOptions({ name: 'DeviceTemplateForm' })
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
-
 const treeStore = useTreeStore();
 const localDeviceCategoryId = ref(null);  // 通过store存储的设备分类id 由父组件传递过来
 const dialogVisible = ref(false) // 弹窗的是否展示
@@ -77,14 +80,22 @@ const formData = ref({
   remark: '',
   status: CommonStatusEnum.ENABLE,
 })
+const formData1 = ref({
+  name: '',
+  deviceCategoryId: localDeviceCategoryId.value,
+  code: '',
+  id: undefined,
+  remark: '',
+  status: CommonStatusEnum.ENABLE,
+})
 const formRules = reactive<FormRules>({
   name: [{ required: true, message: '模板名称不能为空', trigger: 'blur' }],
-  code: [{ required: true, message: '模板编码不能为空', trigger: 'blur' }],
   deviceCategoryId: [{ required: true, message: '所属设备分类不能为空', trigger: 'blur' }],
 
 })
 const formRef = ref() // 表单 Ref
 const deviceCategoryTree = ref()  // 设备分类树
+const showButton = ref(true);
 
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
@@ -148,11 +159,21 @@ const getDeviceCategoryTree = async () => {
 /** 处理 设备分类 树 被点击 */
 const handleDeviceCategoryTreeNodeClick = async (row: { [key: string]: any }) => {
   emit('node-click', row)
-  // treeStore.setSelectedId(row.id);
-  // 更新当前设备分类id
+  isRepated(row.id);
   localDeviceCategoryId.value = row.id
 }
 
+const isRepated = async(id)=>{
+  showButton.value=true;
+  formData1.value = await DeviceTemplateApi.getAttrTemplateByModelCategoryId(id);
+  if(formData1.value){
+    message.error(t('form.repeatDevice'))
+    showButton.value=false;
+  }else{
+    showButton.value=true;
+  }
+}
+
 /** 重置表单 */
 const resetForm = () => {
   formData.value = {

+ 65 - 31
src/views/pms/modeltemplate/detail/attrsModel/AttrTemplateModelForm.vue

@@ -8,41 +8,74 @@
       :rules="DeviceAttrModelFormRules"
       label-width="100px"
     >
-      <el-form-item label="属性名称" prop="name">
-        <el-input v-model="formData.name" placeholder="请输入属性名称" />
-      </el-form-item>
-      <el-form-item label="标识符" prop="code">
-        <el-input v-model="formData.code" placeholder="请输入标识符" />
-      </el-form-item>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="属性名称" prop="name">
+            <el-input v-model="formData.name" placeholder="请输入属性名称" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+<!--          <el-form-item label="标识符" prop="code">
+            <el-input v-model="formData.code" placeholder="请输入标识符" />
+          </el-form-item>-->
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="是否数采:" prop="isCollection">
+            <el-radio-group v-model="formData.isCollection">
+              <el-radio
+                v-for="dict in getIntDictOptions(DICT_TYPE.RQ_IOT_ISCOLLECTION)"
+                :key="dict.value"
+                :value="dict.value"
+                @click="radioChange(dict.value)"
+              >
+                {{ dict.label }}
+              </el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="是否累计:" prop="isSum">
+            <el-radio-group v-model="formData.isSum">
+              <el-radio
+                v-for="dict in getIntDictOptions(DICT_TYPE.RQ_IOT_SUM)"
+                :key="dict.value"
+                :value="dict.value"
+                @click="radioChange(dict.value)"
+              >
+                {{ dict.label }}
+              </el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="物属性" prop="modelAttr">
+            <el-select v-model="formData.modelAttr" placeholder="请选择">
+              <el-option
+                v-for="dict in thingsModelData"
+                :key="dict.modelName"
+                :label="dict.modelName"
+                :value="dict.identifier"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="默认值" prop="defaultValue">
+            <el-input v-model="formData.defaultValue" placeholder="请输入默认值" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+
       <!-- 属性配置 -->
       <DeviceAttrModelProperty
         v-model="formData.selectOptions"
       />
-      <el-form-item label="是否数采" prop="isCollection">
-        <el-radio-group v-model="formData.isCollection">
-          <el-radio
-            v-for="dict in getIntDictOptions(DICT_TYPE.RQ_IOT_ISCOLLECTION)"
-            :key="dict.value"
-            :value="dict.value"
-            @click="radioChange(dict.value)"
-          >
-            {{ dict.label }}
-          </el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="物属性" prop="modelAttr">
-        <el-select v-model="formData.modelAttr" placeholder="请选择">
-          <el-option
-            v-for="dict in thingsModelData"
-            :key="dict.modelName"
-            :label="dict.modelName"
-            :value="dict.identifier"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="默认值" prop="defaultValue">
-        <el-input v-model="formData.defaultValue" placeholder="请输入默认值" />
-      </el-form-item>
       <el-form-item label="描述" prop="description">
         <el-input
           v-model="formData.description"
@@ -98,6 +131,7 @@ const formData = ref<DeviceAttrModelData>({
   },
   isCollection:1,
   modelAttr:'',
+  isSum:1
 })
 const thingsModelData = ref([{
     modelName:'',

+ 2 - 2
src/views/pms/modeltemplate/detail/attrsModel/config.ts

@@ -93,7 +93,7 @@ export const DeviceAttrModelFormRules = {
     }
   ],
   type: [{ required: true, message: '数据类型不能为空', trigger: 'blur' }],
-  code: [
+  /*code: [
     { required: true, message: '标识符不能为空', trigger: 'blur' },
     {
       pattern: /^[a-zA-Z0-9_]{1,50}$/,
@@ -117,7 +117,7 @@ export const DeviceAttrModelFormRules = {
       },
       trigger: 'blur'
     }
-  ],
+  ],*/
   'selectOptions.dataSpecs.childDataType': [{ required: true, message: '元素类型不能为空' }],
   'selectOptions.dataSpecs.size': [
     { required: true, message: '元素个数不能为空' },

+ 4 - 3
src/views/pms/modeltemplate/detail/attrsModel/index.vue

@@ -36,7 +36,7 @@
     <el-tabs>
       <el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
         <el-table-column align="center" label="属性名称" prop="name" />
-        <el-table-column align="center" label="标识符" prop="code" />
+<!--        <el-table-column align="center" label="标识符" prop="code" />-->
         <el-table-column align="center" label="数据类型" prop="type">
           <template #default="{ row }">
             {{ dataTypeOptionsLabel(row.selectOptions?.type) ?? '-' }}
@@ -63,7 +63,7 @@
               v-hasPermi="['rq:iot-model-template-attrs:delete']"
               link
               type="danger"
-              @click="handleDelete(scope.row.id)"
+              @click="handleDelete(scope.row.id,scope.row.deviceCategoryId)"
             >
               删除
             </el-button>
@@ -102,6 +102,7 @@ const message = useMessage() // 消息弹窗
 
 const loading = ref(true) // 列表的加载中
 const list = ref<DeviceAttrModelData[]>([]) // 列表的数据
+const list1 = ref<DeviceAttrModelData[]>([]) // 列表的数据
 const total = ref(0) // 列表的总页数
 const queryParams = reactive({
   pageNo: 1,
@@ -145,12 +146,12 @@ const openForm = (type: string, id?: number,name?:string) => {
   name = categoryName;
 
     formRef.value.open(type,id,name)
-  s
 }
 
 /** 删除按钮操作 */
 const handleDelete = async (id: number) => {
   try {
+
     // 删除的二次确认
     await message.delConfirm()
     // 发起删除

+ 2 - 2
src/views/pms/modeltemplate/detail/dataSpecs/ModelAttrModelNumberDataSpecs.vue

@@ -51,9 +51,9 @@
       @change="unitChange"
     >
       <el-option
-        v-for="(item, index) in getStrDictOptions(DICT_TYPE.IOT_THING_MODEL_UNIT)"
+        v-for="(item, index) in getStrDictOptions(DICT_TYPE.PMS_THING_MODEL_UNIT)"
         :key="index"
-        :label="item.label + '-' + item.value"
+        :label="item.label"
         :value="item.label + '-' + item.value"
       />
     </el-select>

+ 44 - 45
src/views/pms/modeltemplate/index.vue

@@ -20,16 +20,16 @@
           :inline="true"
           label-width="68px"
         >
-          <el-form-item label="模板名称" prop="name">
+          <el-form-item :label="t('modelTemplate.name')" prop="name" style="margin-left: 45px">
             <el-input
               v-model="queryParams.name"
-              placeholder="请输入模板名称"
+              :placeholder="t('modelTemplate.nameHolder')"
               clearable
               @keyup.enter="handleQuery"
               class="!w-240px"
             />
           </el-form-item>
-          <el-form-item label="模板编码" prop="code">
+<!--          <el-form-item label="模板编码" prop="code">
             <el-input
               v-model="queryParams.code"
               placeholder="请输入模板编码"
@@ -37,11 +37,11 @@
               @keyup.enter="handleQuery"
               class="!w-240px"
             />
-          </el-form-item>
-          <el-form-item label="状态" prop="status">
+          </el-form-item>-->
+          <el-form-item :label="t('modelTemplate.status')" prop="status">
             <el-select
               v-model="queryParams.status"
-              placeholder="属性模板状态"
+              :placeholder="t('modelTemplate.status')"
               clearable
               class="!w-240px"
             >
@@ -53,52 +53,52 @@
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="创建时间" prop="createTime">
+          <el-form-item :label="t('modelTemplate.createTime')" prop="createTime">
             <el-date-picker
               v-model="queryParams.createTime"
               value-format="YYYY-MM-DD HH:mm:ss"
               type="datetimerange"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
+              :start-placeholder="t('operationFill.start')"
+              :end-placeholder="t('operationFill.end')"
               class="!w-240px"
             />
           </el-form-item>
           <el-form-item>
-            <el-button @click="handleQuery"><Icon icon="ep:search" />搜索</el-button>
-            <el-button @click="resetQuery"><Icon icon="ep:refresh" />重置</el-button>
+            <el-button @click="handleQuery"><Icon icon="ep:search" />{{t('operationFill.search')}}</el-button>
+            <el-button @click="resetQuery"><Icon icon="ep:refresh" />{{t('operationFill.reset')}}</el-button>
             <el-button
               type="primary"
               plain
               @click="openForm('create')"
               v-hasPermi="['rq:iot-model-template:create']"
             >
-              <Icon icon="ep:plus" /> 新增
+              <Icon icon="ep:plus" />{{t('operationFill.add')}}
             </el-button>
           </el-form-item>
         </el-form>
       </ContentWrap>
       <ContentWrap>
         <el-table v-loading="loading" :data="list">
-          <el-table-column
+<!--          <el-table-column
             label="模板编码"
             align="center"
             prop="code"
             :show-overflow-tooltip="true"
-          />
+          />-->
           <el-table-column
-            label="模板名称"
+            :label="t('modelTemplate.name')"
             align="center"
             prop="name"
             :show-overflow-tooltip="true"
           />
           <el-table-column
-            label="设备分类名称"
+            :label="t('modelTemplate.ec')"
             align="center"
             key="deviceCategoryName"
             prop="deviceCategoryName"
             :show-overflow-tooltip="true"
           />
-          <el-table-column label="状态" key="status">
+          <el-table-column :label="t('modelTemplate.status')" key="status">
             <template #default="scope">
               <el-switch
                 v-model="scope.row.status"
@@ -110,13 +110,13 @@
             </template>
           </el-table-column>
           <el-table-column
-            label="创建时间"
+            :label="t('modelTemplate.createTime')"
             align="center"
             prop="createTime"
             :formatter="dateFormatter"
             width="180"
           />
-          <el-table-column label="操作" align="center" width="160">
+          <el-table-column :label="t('operationFill.operation')" align="center" width="260">
             <template #default="scope">
               <div class="flex items-center justify-center">
                 <el-button
@@ -124,7 +124,7 @@
                   link
                   @click="openDetail(scope.row.deviceCategoryId+','+scope.row.deviceCategoryName)"
                 >
-                  <Icon icon="ep:edit" />查看
+                  <Icon icon="ep:edit" />{{t('operationFill.view')}}
                 </el-button>
                 <el-button
                   type="primary"
@@ -132,26 +132,18 @@
                   @click="openForm('update', scope.row.id)"
                   v-hasPermi="['rq:iot-model-template:update']"
                 >
-                  <Icon icon="ep:edit" />修改
+                  <Icon icon="ep:edit" />{{t('modelTemplate.update')}}
                 </el-button>
-                <el-dropdown
-                  @command="(command) => handleCommand(command, scope.row)"
-                  v-hasPermi="[
-                    'rq:iot-model-template:delete'
-                  ]"
+
+                <el-button
+                  type="danger"
+                  link
+                  @click="handleDelete(scope.row.id,scope.row.deviceCategoryId)"
+                  v-hasPermi="['rq:iot-model-template:delete']"
                 >
-                  <el-button type="primary" link><Icon icon="ep:d-arrow-right" /> 更多</el-button>
-                  <template #dropdown>
-                    <el-dropdown-menu>
-                      <el-dropdown-item
-                        command="handleDelete"
-                        v-if="checkPermi(['rq:iot-model-template:delete'])"
-                      >
-                        <Icon icon="ep:delete" />删除
-                      </el-dropdown-item>
-                    </el-dropdown-menu>
-                  </template>
-                </el-dropdown>
+                  <Icon icon="ep:delete" />{{t('modelTemplate.delete')}}
+                </el-button>
+
               </div>
             </template>
           </el-table-column>
@@ -178,6 +170,7 @@ import * as ModelTemplateApi from '@/api/pms/modeltemplate'
 import TemplateForm from './TemplateForm.vue'
 import ModelCategoryTree from './ModelCategoryTree.vue'
 import { useTreeStore } from '@/store/modules/attrTemplateTreeStore';
+import {DeviceAttrModelApi} from "@/api/pms/modelattrtemplate";
 
 defineOptions({ name: 'DeviceAttrsTemplate' })
 
@@ -267,7 +260,7 @@ const handleStatusChange = async (row: ModelTemplateApi.ModelAttrTemplateVO) =>
 const handleCommand = (command: string, row: ModelTemplateApi.ModelAttrTemplateVO) => {
   switch (command) {
     case 'handleDelete':
-      handleDelete(row.id)
+      handleDelete(row.id,row.deviceCategoryId)
       break
     default:
       break
@@ -275,13 +268,19 @@ const handleCommand = (command: string, row: ModelTemplateApi.ModelAttrTemplateV
 }
 
 /** 删除按钮操作 */
-const handleDelete = async (id: number) => {
+const handleDelete = async (id: number | undefined, deviceId: number) => {
   try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await ModelTemplateApi.deleteModelTemplate(id)
-    message.success(t('common.delSuccess'))
+    const data = await ModelTemplateApi.getIsRelated(deviceId);
+    if(data.length===0){
+      // 删除的二次确认
+      await message.delConfirm()
+      // 发起删除
+      await ModelTemplateApi.deleteModelTemplate(id)
+      message.success(t('common.delSuccess'))
+    }else{
+      message.error(t('form.relatedModel'))
+    }
+
     // 刷新列表
     await getList()
   } catch {}

+ 2 - 1
src/views/system/menu/MenuForm.vue

@@ -18,7 +18,8 @@
         />
       </el-form-item>
       <el-form-item label="菜单名称" prop="name">
-        <el-input v-model="formData.name" clearable placeholder="请输入菜单名称" />
+<!--        <el-input v-model="formData.name" clearable placeholder="请输入菜单名称" />-->
+        <lang-input v-model="formData.name" placeholder="请输入菜单名称" />
       </el-form-item>
       <el-form-item label="菜单类型" prop="type">
         <el-radio-group v-model="formData.type">