From 4e71b9960694ed74bdd2147c37c207c01667bf3d Mon Sep 17 00:00:00 2001
From: caill <815519168@qq.com>
Date: Tue, 4 Mar 2025 18:44:40 +0800
Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E9=97=A8=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 base-vue/package.json                         |   4 +-
 base-vue/src/main.js                          |   5 +-
 base-vue/src/views/common/home.vue            |   6 +
 .../src/views/modules/contract/contract.vue   |  20 ++-
 .../src/views/modules/contract/temp-add.vue   | 117 ++++++++++++++++++
 .../views/modules/sys/dept-add-or-update.vue  |  40 +++---
 base-vue/src/views/modules/sys/dept.vue       |  16 +--
 7 files changed, 174 insertions(+), 34 deletions(-)
 create mode 100644 base-vue/src/views/modules/contract/temp-add.vue

diff --git a/base-vue/package.json b/base-vue/package.json
index 58fe1cb..9d413b3 100644
--- a/base-vue/package.json
+++ b/base-vue/package.json
@@ -22,7 +22,7 @@
     "bpmn-js-properties-panel": "^0.33.0",
     "camunda-bpmn-moddle": "^4.3.0",
     "echarts": "^5.4.2",
-    "element-ui": "2.8.2",
+    "element-ui": "^2.15.14",
     "gulp": "4.0.2",
     "gulp-concat": "2.6.1",
     "gulp-load-plugins": "2.0.5",
@@ -53,7 +53,7 @@
     "babel-preset-stage-2": "6.22.0",
     "babel-register": "6.22.0",
     "chalk": "2.3.0",
-    "chromedriver": "2.27.2",
+    "chromedriver": "^2.27.2",
     "copy-webpack-plugin": "4.0.1",
     "cross-spawn": "5.0.1",
     "css-loader": "0.28.0",
diff --git a/base-vue/src/main.js b/base-vue/src/main.js
index f76a67b..6381bfe 100644
--- a/base-vue/src/main.js
+++ b/base-vue/src/main.js
@@ -3,9 +3,9 @@ import App from '@/App'
 import router from '@/router'                 // api: https://github.com/vuejs/vue-router
 import store from '@/store'                   // api: https://github.com/vuejs/vuex
 import VueCookie from 'vue-cookie'            // api: https://github.com/alfhen/vue-cookie
-import '@/element-ui'                         // api: https://github.com/ElemeFE/element
+import ElementUI from 'element-ui'
 import '@/icons'                              // api: http://www.iconfont.cn/
-import '@/element-ui-theme'
+import 'element-ui/lib/theme-chalk/index.css'
 import '@/assets/scss/index.scss'
 import httpRequest from '@/utils/httpRequest' // api: https://github.com/axios/axios
 import { isAuth } from '@/utils'
@@ -23,6 +23,7 @@ import './style/bpmn-custom-color.css' // 导入自定义的样式文件
 
 Vue.prototype.$echarts = echarts;
 Vue.use(VueCookie)
+Vue.use(ElementUI)
 Vue.config.productionTip = false
 
 // 非生产环境, 适配mockjs模拟数据                 // api: https://github.com/nuysoft/Mock
diff --git a/base-vue/src/views/common/home.vue b/base-vue/src/views/common/home.vue
index e2dfafa..c738ff4 100644
--- a/base-vue/src/views/common/home.vue
+++ b/base-vue/src/views/common/home.vue
@@ -101,6 +101,8 @@ export default {
       marker: null,
       keyword: "",
       local: null,
+      dataListLoading: false,
+      dataListSelections: [],
       dataList:[]
     };
   },
@@ -115,6 +117,10 @@ export default {
                 this.dataList = data.notices
               }
             })
+    },
+    // 多选
+    selectionChangeHandle (val) {
+      this.dataListSelections = val
     }
   },
   mounted(){
diff --git a/base-vue/src/views/modules/contract/contract.vue b/base-vue/src/views/modules/contract/contract.vue
index c4beeda..3fb9bdd 100644
--- a/base-vue/src/views/modules/contract/contract.vue
+++ b/base-vue/src/views/modules/contract/contract.vue
@@ -98,8 +98,8 @@
         width="150"
         label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="assignHandle(scope.row.id)">模板生成</el-button>
-          <el-button type="text" size="small">上传附近</el-button>
+          <el-button type="text" size="small" @click="addTempHandle(scope.row.id)">模板生成</el-button>
+          <el-button type="text" size="small">上传附件</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -114,14 +114,17 @@
     </el-pagination>
     <!-- 弹窗, 新增 / 修改 -->
     <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
+    <temp-add v-if="tempVisible" ref="tempAdd"></temp-add>
   </div>
 </template>
 
 <script>
 import AddOrUpdate from './contract-add-or-update'
+import TempAdd from './temp-add'
 export default {
   components: {
-    AddOrUpdate
+    AddOrUpdate,
+    TempAdd
   },
   data () {
     return {
@@ -136,7 +139,8 @@ export default {
       totalPage: 0,
       dataListLoading: false,
       dataListSelections: [],
-      addOrUpdateVisible: false
+      addOrUpdateVisible: false,
+      tempVisible: false
     }
   },
   activated () {
@@ -187,7 +191,13 @@ export default {
         this.$refs.addOrUpdate.init(id)
       })
     },
-    assignHandle (id) {}
+    // 生成模板
+    addTempHandle (id) {
+      this.tempVisible = true
+      this.$nextTick(() => {
+        this.$refs.tempAdd.init(id)
+      })
+    }
   }
 }
 </script>
\ No newline at end of file
diff --git a/base-vue/src/views/modules/contract/temp-add.vue b/base-vue/src/views/modules/contract/temp-add.vue
new file mode 100644
index 0000000..d056128
--- /dev/null
+++ b/base-vue/src/views/modules/contract/temp-add.vue
@@ -0,0 +1,117 @@
+<template>
+  <el-dialog
+  title="产品供应合同"
+  :close-on-click-modal="false"
+  :visible.sync="visible">
+    <section class="content">
+      <el-descriptions :column="2">
+        <el-descriptions-item label="需方">kooriookami</el-descriptions-item>
+        <el-descriptions-item label="合同编号">18100000000</el-descriptions-item>
+        <el-descriptions-item label="供方">上海诺力智能科技有限公司</el-descriptions-item>
+        <el-descriptions-item label="签订时间">2025年1月14日</el-descriptions-item>
+      </el-descriptions>
+      <h2>一、产品明细单</h2>
+      <el-table
+      :data="dataList"
+      border
+      style="width: 100%;">
+        <el-table-column
+          type="index"
+          width="50"/>
+        <el-table-column
+          prop="materialCode"
+          header-align="center"
+          align="center"
+          label="物料编号"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="物料名称"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="型号"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="数量"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="单位"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="单价(元)"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="总价(元)"/>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="备注"/>
+      </el-table>
+      <el-row>
+        <el-col :span="12">共计人民币金额:(大写) XXXXXXX</el-col>
+        <el-col :span="12">含13%增值税</el-col>
+      </el-row>
+      <p class="tip_p">二、质量要求、技术标准、供方对质量负责的条件和期限:技术标准符合行业标准。</p>
+      <p class="tip_p">三、售后服务:保修期6个月,人为造成的损坏不在质保范围内。</p>
+      <p class="tip_p">四、交货时间、地点:货期:待定;交货地:待客户通知。</p>
+      <p class="tip_p">五、运输方式及到达站和费用负担:由供方负担。</p>
+      <p class="tip_p">六、包装标准:按国内标准包装。</p>
+      <p class="tip_p">八、结算方式:款到发货,付款方式:电汇。</p>
+      <p class="tip_p">八、违约责任:按《中华人民共和国民法典》执行。</p>
+      <p class="tip_p">九、解决合同纠纷的方式:买卖双方首先友好协商解决,协商不成,任何一方均可向有管辖权法院起诉。</p>
+      <p class="tip_p">十、其它约定事项:合同扫描件有效,签字盖章之日起生效。</p>
+      <el-descriptions direction="vertical" :column="2" border>
+        <el-descriptions-item label="需方">
+          <div>单位名称:</div>
+          <div>地址:</div>
+          <div>委托代理电话:</div>
+          <div>传真:</div>
+          <div>开户银行:</div>
+          <div>帐号:</div>
+        </el-descriptions-item>
+        <el-descriptions-item label="供方">
+          <div>单位名称:上海诺力智能科技有限公司(盖章)</div>
+          <div>地址:上海青浦区徐泾镇高光路215弄99号4号楼302室</div>
+          <div>委托代理电话:</div>
+          <div>传真:</div>
+          <div>开户银行:招商银行虹桥支行</div>
+          <div>帐号:12191702501091</div>
+        </el-descriptions-item>
+      </el-descriptions>
+    </section>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">取消</el-button>
+      <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      visible: false,
+      dataList: []
+    }
+  },
+  methods: {
+    init (id) {
+      this.visible = true
+    },
+    // 表单提交
+    dataFormSubmit () {}
+  }
+}
+</script>
\ No newline at end of file
diff --git a/base-vue/src/views/modules/sys/dept-add-or-update.vue b/base-vue/src/views/modules/sys/dept-add-or-update.vue
index 9071859..0fafacb 100644
--- a/base-vue/src/views/modules/sys/dept-add-or-update.vue
+++ b/base-vue/src/views/modules/sys/dept-add-or-update.vue
@@ -21,9 +21,9 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="顶级部门" prop="isTop">
-            <el-radio-group v-model="dataForm.isTop" style="width: 140px">
-              <el-radio label="1">是</el-radio>
-              <el-radio label="0">否</el-radio>
+            <el-radio-group v-model="dataForm.isTop" style="width: 140px" @change="handleChange">
+              <el-radio :label="'1'">是</el-radio>
+              <el-radio :label="'0'">否</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-col>
@@ -68,10 +68,8 @@
           name: null,
           deptSort: 999,
           isTop: '1',
-          isUsed: true
-          // ext_id: null,
-          // sub_count: 0,
-          // pid: null
+          isUsed: true,
+          pid: null
         },
         depts: [],
         dataRule: {
@@ -88,20 +86,20 @@
       Treeselect
     },
     methods: {
+      handleChange () {
+        this.$forceUpdate()
+      },
       init (row) {
         this.visible = true
         this.$nextTick(() => {
           this.$refs['dataForm'].resetFields()
           if (row) {
             this.dataForm = {...row}
-            // if (this.dataForm.pid !== null) {
-            //   this.dataForm.isTop = '0'
-            // } else {
-            //   this.dataForm.isTop = '1'
-            // }
-            if (this.dataForm.pid != null) {
+            if (this.dataForm.pid !== null) {
+              this.dataForm.isTop = '0'
               this.getSupDepts(this.dataForm.pid)
             } else {
+              this.dataForm.isTop = '1'
               this.getDepts()
             }
           }
@@ -124,7 +122,7 @@
           if (data.children) {
             this.buildDepts(data.children)
           }
-          if (data.has_children && !data.children) {
+          if (data.hasChildren && !data.children) {
             data.children = null
           }
         })
@@ -133,25 +131,33 @@
         this.$http({
           url: this.$http.adornUrl('/api/dept/vo'),
           method: 'get',
-          params: this.$http.adornParams({is_used: true})
+          params: this.$http.adornParams({isUsed: true})
         }).then(({data}) => {
           if (data && data.code === 200) {
             this.depts = data.content.map(function(obj) {
-              if (obj.has_children) {
+              if (obj.hasChildren) {
                 obj.children = null
               }
               return obj
             })
+            console.log(this.depts)
           }
         })
       },
+      normalizer(node) {
+        return {
+          id: node.deptId,
+          label: node.name,
+          children: node.children
+        }
+      },
       // 获取弹窗内部门数据
       loadDepts({ action, parentNode, callback }) {
         if (action === LOAD_CHILDREN_OPTIONS) {
           this.$http({
             url: this.$http.adornUrl('/api/dept/vo'),
             method: 'get',
-            params: this.$http.adornParams({is_used: true, pid: parentNode.dept_id})
+            params: this.$http.adornParams({isUsed: true, pid: parentNode.deptId})
           }).then(({res}) => {
             parentNode.children = res.content.map(function(obj) {
               obj.children = null
diff --git a/base-vue/src/views/modules/sys/dept.vue b/base-vue/src/views/modules/sys/dept.vue
index 49b6f11..5b12a1c 100644
--- a/base-vue/src/views/modules/sys/dept.vue
+++ b/base-vue/src/views/modules/sys/dept.vue
@@ -19,7 +19,7 @@
       <el-form-item>
         <el-button @click="getDataList()">查询</el-button>
         <el-button v-if="isAuth('sys:dept:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
-        <el-button v-if="isAuth('sys:dept:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0">批量删除</el-button>
+        <el-button v-if="isAuth('sys:dept:delete')" type="danger" @click="deleteHandle(1)" :disabled="dataListSelections.length <= 0">批量删除</el-button>
       </el-form-item>
     </el-form>
     <el-table
@@ -80,7 +80,7 @@
         label="操作">
         <template slot-scope="scope">
           <el-button v-if="isAuth('sys:dept:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-button>
-          <el-button v-if="isAuth('sys:dept:delete')" type="text" size="small" @click="deleteHandle(scope.row.deptId)">删除</el-button>
+          <el-button v-if="isAuth('sys:dept:delete')" type="text" size="small" @click="deleteHandle(2, scope.row.deptId)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -104,8 +104,8 @@ export default {
   data () {
     return {
       dataForm: {
-        name: '',
-        isUsed: ''
+        name: null,
+        isUsed: null
       },
       enabledTypeOptions: [
         { key: true, displayName: '启用' },
@@ -136,7 +136,7 @@ export default {
         params: this.$http.adornParams({
           'page': this.pageIndex,
           'size': this.pageSize,
-          'sort': 'id,desc',
+          'sort': 'create_time',
           'name': this.dataForm.name,
           'isUsed': this.dataForm.isUsed
         })
@@ -174,11 +174,11 @@ export default {
       })
     },
     // 删除
-    deleteHandle (id) {
+    deleteHandle (type, id) {
       var ids = id ? [id] : this.dataListSelections.map(item => {
         return item.deptId
       })
-      this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
+      this.$confirm(type === 1 ? `确认删除选中的${this.dataListSelections.length}条数据?` : '确定删除吗,如果存在下级节点则一并删除,此操作不能撤销!', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
@@ -186,7 +186,7 @@ export default {
         this.$http({
           url: this.$http.adornUrl('/api/dept'),
           method: 'DELETE',
-          data: this.$http.adornData(ids)
+          data: ids
         }).then(({data}) => {
           if (data && data.code === 200) {
             this.$message({