From 3bd55592b33a86c8b0dce21a9e8ea6126b9c2d94 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 21 三月 2025 10:36:44 +0800
Subject: [PATCH] Merge branch 'dev'

---
 src/views/codingRuler/index.vue |  485 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 485 insertions(+), 0 deletions(-)

diff --git a/src/views/codingRuler/index.vue b/src/views/codingRuler/index.vue
new file mode 100644
index 0000000..c207652
--- /dev/null
+++ b/src/views/codingRuler/index.vue
@@ -0,0 +1,485 @@
+<template>
+  <div class="app-container">
+    <div v-loading="loading">
+    <div class="slot">
+      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="75px">
+        <el-form-item label="椤圭洰鐮佺被鍨�" prop="projectCodeType">
+          <el-select v-model="queryParams.projectCodeType" placeholder="椤圭洰鐮佺被鍨�" @change="handleQuery">
+            <el-option
+              v-for="dict in dict.type.coding_type"
+              :key="dict.value"
+              :value="dict.value"
+              :label="dict.label"
+            >
+            </el-option>
+          </el-select>
+
+        </el-form-item>
+        <el-form-item label="鍖洪棿绫诲瀷" prop="intervalType">
+          <el-select v-model="queryParams.intervalType" placeholder="鍖洪棿绫诲瀷" @change="handleQuery">
+            <el-option
+              v-for="dict in dict.type.interval_type"
+              :key="dict.value"
+              :value="dict.value"
+              :label="dict.label"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="right-section">
+        <div class="add-btn">
+          <el-tooltip content="鏂板" effect="dark" placement="top">
+            <el-button :disabled="!isReserve" circle icon="el-icon-plus" @click="add()" size="small"/>
+          </el-tooltip>
+        </div>
+      </div>
+    </div>
+      <el-table
+        :data="tableData"
+        row-key="id"
+        border
+        @selection-change="handleSelectionChange">
+        <el-table-column
+          type="selection"
+          width="55">
+        </el-table-column>
+        <el-table-column
+
+          prop="projectCodeType"
+          label="椤圭洰鐮佺被鍨�"
+        >
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.coding_type" :value="scope.row.projectCodeType"/>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="intervalType"
+          label="鍖洪棿绫诲瀷"
+        >
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.interval_type" :value="scope.row.intervalType"/>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="leftSymbol"
+          label="宸︾鍙�"
+        >
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_coding_operator" :value="scope.row.leftSymbol"/>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="leftValue"
+          label="宸﹀��"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="rightSymbol"
+          label="鍙崇鍙�"
+        >
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_coding_operator" :value="scope.row.rightSymbol"/>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="rightValue"
+          label="鍙冲��"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="status"
+          label="鐘舵��"
+        >
+          <template slot-scope="scope">
+              <el-tag :type="scope.row.status === 0 ? 'info' : 'success'">
+                {{scope.row.status === 0 ? "鏈惎鐢�" : "鍚敤"}}
+              </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔"  min-width="100">
+          <template slot-scope="scope">
+            <el-button v-if="editShow" size="medium" type="text"
+                       @click="changeStatus(scope.row)">
+              {{scope.row.status === 0 ? "鍚敤" : "鍋滅敤"}}
+            </el-button>
+
+            <el-button v-if="editShow" size="medium" type="text"
+                       @click="editCodingRuler(scope.row)"
+                       :disabled="scope.row.status === 1"
+            >缂栬緫</el-button>
+
+            <el-button v-if="delShow" size="medium"
+                       type="text"
+                       @click="deleteCodingRuler(scope.row)"
+                       :disabled="scope.row.status === 1"
+            >鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="queryParams.currentPage"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+      <el-dialog width="45%" :title="dialogTitle" @close="closeDialog" :visible.sync="open" :show-close="true"  :close-on-click-modal="true"  :destroy-on-close="true">
+            <el-form :model="codingRulerForm" :rules="rules" ref="codingRulerForm">
+              <el-form-item label="椤圭洰鐮佺被鍨�" :label-width="formLabelWidth" prop="projectCodeType">
+                <el-select v-model="codingRulerForm.projectCodeType" placeholder="椤圭洰鐮佺被鍨�" @change="changeOption($event)">
+                  <el-option
+                    v-for="dict in dict.type.coding_type"
+                    :key="dict.value"
+                    :value="dict.value"
+                    :label="dict.label"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鍖洪棿绫诲瀷" :label-width="formLabelWidth" prop="intervalType">
+                <el-select v-model="codingRulerForm.intervalType" placeholder="鍖洪棿绫诲瀷" @change="changeOption($event)">
+                  <el-option
+                    v-for="dict in dict.type.interval_type"
+                    :key="dict.value"
+                    :value="dict.value"
+                    :label="dict.label"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="宸︾鍙�" :label-width="formLabelWidth" prop="leftSymbol" >
+                    <el-select v-model="codingRulerForm.leftSymbol" placeholder="閫夋嫨绗﹀彿" @change="changeOption($event)">
+                      <el-option
+                        v-for="dict in leftOption"
+                        :key="dict.value"
+                        :value="dict.value"
+                        :label="dict.label.replace('澶т簬', '>')
+                    .replace('灏忎簬', '<')
+                    .replace('澶х瓑浜�', '>=')
+                    .replace('绛変簬', '=')
+                    .replace('灏忎簬绛変簬', '<=')"
+                      >
+                      </el-option>
+                    </el-select>
+
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="宸﹀��" :label-width="formLabelWidth" prop="leftValue">
+                    <el-input v-model="codingRulerForm.leftValue" autocomplete="off" type="number" :min="0"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+            <el-form :model="singleForm" :rules="rules2" ref="singleForm" v-show="isSingleInterval">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="鍙崇鍙�" :label-width="formLabelWidth" prop="rightSymbol"  >
+                    <el-select v-model="singleForm.rightSymbol" placeholder="閫夋嫨绗﹀彿" @change="changeOption($event)">
+                      <el-option
+                        v-for="dict in rightOption"
+                        :key="dict.value"
+                        :value="dict.value"
+                        :label="dict.label.replace('澶т簬', '>')
+                    .replace('灏忎簬', '<')
+                    .replace('澶х瓑浜�', '>=')
+                    .replace('绛変簬', '=')
+                    .replace('灏忎簬绛変簬', '<=')"
+                      >
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="鍙冲��" :label-width="formLabelWidth" prop="rightValue">
+                    <el-input v-model="singleForm.rightValue" autocomplete="off" type="number" :min="0"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+
+            </el-form>
+
+            <div slot="footer" class="dialog-footer">
+              <el-button @click="closeDialog">鍙� 娑�</el-button>
+              <el-button type="primary" @click="addOrEditCodingRuler">纭� 瀹�</el-button>
+            </div>
+          </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  addCodingRuler,
+  changeCodingRulerStatus,
+  deleteCodingRulerById,
+  editCodingRuler,
+  getCodingRulers
+} from '@/api/codingRuler/codingRuler.js'
+
+export default {
+  dicts: ['sys_coding_operator','coding_type','interval_type'],
+  name: "CodingRulerDialog",
+  data() {
+    return {
+      rules2:{
+        rightSymbol:[{ required: true, message: '璇疯緭鍏ュ彸绗﹀彿', trigger: 'blur' }],
+        rightValue:[{ required: true, message: '璇疯緭鍏ュ彸鍊�', trigger: 'blur' }],
+      },
+      rules:{
+        projectCodeType: [{ required: true, message: '璇疯緭鍏ラ」鐩爜绫诲瀷', trigger: 'blur' }],
+        intervalType: [{ required: true, message: '璇疯緭鍏ュ尯闂寸被鍨�', trigger: 'blur' }],
+        leftSymbol: [{ required: true, message: '璇疯緭鍏ュ乏绗﹀彿', trigger: 'blur' }],
+        leftValue: [{ required: true, message: '璇疯緭鍏ュ乏鍊�', trigger: 'blur' }],
+      },
+      // 鏄惁涓哄崟鍖洪棿
+      isSingleInterval:false,
+      // 寮瑰嚭妗嗘爣棰�
+      dialogTitle:"",
+      //鏄惁鏂板鏉′欢
+      isReserve: true,
+      // 鑳藉惁淇敼鏉′欢
+      editShow:true,
+      // 鑳藉惁鍒犻櫎鏉′欢
+      delShow:true,
+      // 鎬绘潯鏁�
+      total:0,
+      // 琛ㄦ牸鍐呭
+      tableData:[],
+      // 鏄惁寮�鍚悳绱㈡潯浠�
+      showSearch:true,
+      queryParams:{
+        intervalType:'',
+        currentPage: 1,
+        pageSize: 10,
+        projectCodeType:'',
+      },
+      formLabelWidth: '120px',
+      // 琛ㄥ崟鍙傛暟
+      codingRulerForm:{
+        projectCodeType:'',
+        intervalType:'',
+        leftSymbol:'',
+        leftValue:'',
+
+      },
+      singleForm:{
+        rightSymbol:'',
+        rightValue:'',
+      },
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 閫変腑鏁扮粍
+      ids: [],
+      loading:false,
+    }
+  },
+  computed:{
+    leftOption(){
+      if (this.codingRulerForm.intervalType === null || this.codingRulerForm.intervalType === ''){
+        return  this.dict.type.sys_coding_operator
+      }else {
+        if (this.codingRulerForm.intervalType === 'interval'){
+          return this.dict.type.sys_coding_operator.filter(item => item.value <= 2);
+        }else {
+          return  this.dict.type.sys_coding_operator;
+
+        }
+      }
+    },
+    rightOption(){
+        return this.dict.type.sys_coding_operator.filter(item => item.value >= 2);
+    }
+  },
+  created(){
+
+  },
+  mounted() {
+    // 鍒濆鍖栬〃鍗曟暟鎹�
+    this.getList();
+  },
+  watch:{
+    'codingRulerForm.intervalType'(val){
+      if (val && val === 'single_interval'){
+        this.isSingleInterval = false;
+      }else if (val === 'interval'){
+        this.isSingleInterval =true;
+      }else {
+        this.isSingleInterval =false;
+      }
+    }
+  },
+  methods: {
+    // 娓呴櫎楠岃瘉鏍峰紡浠ュ強鍗曞尯闂村彸绗﹀彿鐨勫��
+    changeOption(e){
+      if (e === 'single_interval'){
+        this.singleForm.rightValue = null;
+        this.singleForm.rightSymbol = null;
+      }
+    },
+    // 鑾峰彇琛ㄦ牸鏁版嵁
+    getList(){
+      this.loading = true;
+      getCodingRulers(this.queryParams).then(res =>{
+        this.tableData = res.data;
+        this.total = res.total;
+        this.loading = false;
+      })
+
+    },
+    // 淇敼
+    editCodingRuler(row){
+      this.open = true;
+      this.dialogTitle = "缂栬緫";
+      // 琛ㄥ崟璧嬪��
+      // 鎷疯礉
+      this.codingRulerForm = {...row};
+      this.singleForm =  {...row};
+    },
+    // 鍒犻櫎
+    deleteCodingRuler(row){
+      this.$modal.confirm('鏄惁鍒犻櫎閫変腑缂栫爜瑙勫垯?').then(function(){
+        return deleteCodingRulerById(row.id);
+      }).then(() =>{
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    // 鏂板
+    add(){
+      this.open = true;
+      this.dialogTitle = "鏂板";
+    },
+    // 鍙栨秷
+    closeDialog() {
+      this.open = false;
+      this.clearForm();
+    },
+    // 娓呯┖琛ㄥ崟
+    clearForm() {
+      this.codingRulerForm = {
+        id :null,
+        projectCodeType:null,
+        intervalType:null,
+        leftSymbol:null,
+        leftValue:null,
+      }
+      this.singleForm ={
+        rightSymbol:null,
+        rightValue:null,
+      }
+      this.resetForm("codingRulerForm");
+      this.resetForm("singleForm");
+      this.isSingleInterval = false;
+    },
+
+    handleSelectionChange(val) {
+      this.ids = val.map(item => item.id)
+      console.log(ids)
+    },
+    // 鎼滅储鎸夐挳鎿嶄綔
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    // 閲嶇疆鎼滅储
+    resetQuery(){
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 鐘舵�佸垏鎹�
+    changeStatus(row){
+      changeCodingRulerStatus(row.id).then(res =>{
+        this.getList();
+        this.$message.info(res.msg)
+      })
+    },
+    async addOrEditCodingRuler() {
+
+      // 榛樿
+      let intervalState = false;
+
+      if(this.codingRulerForm.intervalType && this.codingRulerForm.intervalType === "interval"){
+        // 鍖洪棿鎯呭喌
+        intervalState = true;
+      }else {
+        intervalState = false;
+      }
+      if (intervalState){
+        let need1 = false;
+        let need2 = false;
+        let warning = false;
+         await this.$refs["singleForm"].validate((valid) =>{
+          if (valid){
+            need1 = true;
+          }
+        })
+          await this.$refs["codingRulerForm"].validate((valid) => {
+          if (valid) {
+            need2 = true;
+            if(this.codingRulerForm.leftValue >= this.singleForm.rightValue){
+              warning = true;
+            }
+          }
+        });
+         if (warning){
+           this.$message.warning("鍙冲�煎簲璇ュぇ浜庡乏鍊�")
+           return
+         }
+        if (need1 && need2){
+          this.addOrEdit();
+        }
+      }else {
+        this.$refs["codingRulerForm"].validate((valid) => {
+          if (valid) {
+            this.addOrEdit();
+          }
+        });
+      }
+    },
+    async addOrEdit(){
+      const form = this.codingRulerForm;
+      form.rightSymbol = this.singleForm.rightSymbol;
+      form.rightValue = this.singleForm.rightValue;
+      if (this.dialogTitle === "鏂板") {
+        await addCodingRuler(form).then((res) => {
+          this.$message.success(res.msg);
+          this.open = false;
+          this.getList();
+        })
+      } else if (this.dialogTitle === "缂栬緫" && this.codingRulerForm.id){
+        await editCodingRuler(form).then((res) => {
+          this.$message.success(res.msg);
+          this.open = false;
+          this.getList()
+        })
+      }
+      this.isSingleInterval = false;
+    }
+
+
+  }
+}
+</script>
+
+<style scoped>
+.right-section {
+  display: flex;
+
+
+  .add-btn {
+    margin: 0 10px;
+  }
+}
+.slot {
+  display: flex;
+}
+</style>

--
Gitblit v1.8.0