lsw hai 1 ano
pai
achega
0efbdb8cc7

+ 1 - 1
admin-ui/src/assets/styles/extend.scss

@@ -2,7 +2,7 @@
 .vl-notify-mask {
   background-color: black !important;
   opacity: 0.4 !important;
-  z-index: 1504;
+  z-index: 1502!important;
 }
 .vl-notify.vl-notify-msg.vl-notify-loading {
   z-index: 1505 !important;

+ 70 - 0
admin-ui/src/components/companyInfo.vue

@@ -0,0 +1,70 @@
+<template>
+  <div class="cards">
+    <div class="ctop">
+      <span class="icon">&#xe646;</span>
+      <span class="ctitle">{{ form.companyName }}</span>
+      <span class="ckk" @click="op('info')">查看</span>
+      <img :src="rz" class="rz" />
+      <span class="icon qr" title="点击查看企业二维码" @click="op('qr')">&#xe643;</span>
+    </div>
+    <div class="desc">账户余额(元)</div>
+    <div class="money">{{ form.money }}</div>
+    <el-row :gutter="10" class="btm" v-if="bar">
+      <el-button type="primary" icon="el-icon-minus" @click="op('out')" v-hasPermi="['work:out:add']">提现</el-button>
+      <el-button type="primary" icon="el-icon-plus" @click="op('add')" v-hasPermi="['work:recharge:add']">充值</el-button>
+      <el-button type="primary" icon="el-icon-document" @click="op('recharge_list')" v-hasPermi="['work:recharge:list']">充值明细</el-button>
+      <el-button type="primary" icon="el-icon-s-promotion" @click="op('out_list')" v-hasPermi="['work:out:list']">提现明细</el-button>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import out_edit from '@/views/work/money/out/edit.vue';
+import out_list from '@/views/work/money/out/record.vue';
+import recharge_edit from '@/views/work/money/recharge/edit.vue';
+import recharge_list from '@/views/work/money/recharge/record.vue';
+import qr from '@/components/qr';
+import rz from '@/assets/images/rz.png';
+import company from '@/views/work/company/detail.vue';
+export default {
+  props: {
+    bar: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      rz: rz,
+      form: {}
+    };
+  },
+  mounted() {
+    this.ajax({ url: '/work/company/index' }).then((response) => {
+      this.form = response.data;
+    });
+  },
+  methods: {
+    op(tag, row) {
+      if (tag == 'info') {
+        this.iframe({ obj: company, param: { id: this.form.id, detail: true }, title: '企业信息', width: '60%', height: '75%' });
+      }
+      if (tag == 'qr') {
+        this.iframe({ obj: qr, param: {}, title: '查看企业二维码', width: '27%', height: '45%' });
+      }
+      if (tag == 'out') {
+        this.iframe({ obj: out_edit, param: { company: this.form }, title: '提现申请', width: '40%', height: '55%' });
+      }
+      if (tag == 'add') {
+        this.iframe({ obj: recharge_edit, param: {}, title: '充值申请', width: '40%', height: '65%' });
+      }
+      if (tag == 'recharge_list') {
+        this.iframe({ obj: recharge_list, param: {}, title: '充值明细', width: '72%', height: '70%' });
+      }
+      if (tag == 'out_list') {
+        this.iframe({ obj: out_list, param: {}, title: '提现明细', width: '72%', height: '70%' });
+      }
+    }
+  }
+};
+</script>

+ 49 - 0
admin-ui/src/components/sms.vue

@@ -0,0 +1,49 @@
+<template>
+  <el-input type="number" v-model="value" disabled>
+    <template slot="append">
+      <span @click="getCode()" class="yzm">{{ msg }}</span>
+    </template>
+  </el-input>
+</template>
+
+<script>
+export default {
+  props: {
+    value: {
+      type: String
+    }
+  },
+  data() {
+    return {
+      msg: '获取验证码',
+      time: 60,
+      flag: true
+    };
+  },
+  mounted() {
+    this.ajax({ url: '/work/company/index' }).then((response) => {
+      this.form = response.data;
+    });
+  },
+  methods: {
+    getCode() {
+      if (this.flag) {
+        this.$modal.msgSuccess('你的验证码是123456');
+        //一分钟倒计时
+        var countdown = setInterval(() => {
+          this.time--;
+          if (this.time == 0) {
+            this.flag = true;
+            this.msg = '获取短信';
+            this.time = 60;
+            clearInterval(countdown);
+          } else {
+            this.flag = false;
+            this.msg = '重新获取(' + this.time + ')';
+          }
+        }, 1000);
+      }
+    }
+  }
+};
+</script>

+ 4 - 0
admin-ui/src/main.js

@@ -50,6 +50,8 @@ import images from '@/components/images'; //图片上传
 import imagePreview from '@/components/imagePreview'; //图片预览
 import preview from '@/components/preview'; //图片预览
 import projectSelect from '@/components/projectSelect' //关联项目
+import companyInfo from '@/components/companyInfo' //账户面板信息
+import sms from '@/components/sms' //获取验证码
 import util from '@/utils/util.js' //工具类
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
@@ -86,6 +88,8 @@ Vue.component('images', images)
 Vue.component('imagePreview', imagePreview)
 Vue.component('preview', preview)
 Vue.component('projectSelect', projectSelect)
+Vue.component('companyInfo', companyInfo)
+Vue.component('sms', sms)
 Vue.use(directive)
 Vue.use(plugins)
 Vue.use(VueMeta)

+ 4 - 0
admin-ui/src/store/modules/user.js

@@ -36,6 +36,9 @@ const user = {
     companyId: (state, companyId) => {
       state.companyId = companyId
     },
+    phone: (state, phone) => {
+      state.phone = phone
+    },
     SET_ROLES: (state, roles) => {
       state.roles = roles
     },
@@ -77,6 +80,7 @@ const user = {
           commit('SET_NAME', user.userName)
           commit('SET_nickName', user.nickName)
           commit('companyId', user.companyId);
+          commit('phone', user.phonenumber);
           if(user.dept){
             commit('deptNameStr', user.dept.deptName||'')
             commit('deptId', user.dept.deptId);

+ 13 - 266
admin-ui/src/views/index.vue

@@ -12,240 +12,38 @@
         src="//tianqi.2345.com/plugin/widget/index.htm?s=3&z=2&t=0&v=0&d=2&bd=0&k=&f=#545555&ltf=#545555&htf=ffffff&q=1&e=1&a=1&c=72036&w=180&h=36&align=center"
       ></iframe>
     </div>
-    <panel-group :cdata="data.count"/>
     <!--散货过车和重量监控-->
     <div class="chart-wrapper">
-      <div class="pop" style="width: 40%">
-        <div class="out" style="margin: 0px; margin-top: 5px">
+      <div class="pop" style="width: 70%">
+        <div class="out">
           <div class="int">
             <div class="bos" style="border: 0px">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">
-                  <span>散货过车和重量监控</span>
-                  <span class="jz">截至{{ time }}</span>
-                </div>
-              </div>
-              <div class="rows">
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(120, 215, 121, 1) 26%, rgba(95, 196, 91, 1) 100%)">
-                      <div class="tti">本日</div>
-                      <div class="num">
-                        <span>{{ data.pass.sDayCar || 0 }}</span>
-                        <span class="unit">辆</span>
-                      </div>
-                      <div class="num">
-                        <span>{{ data.pass.sDayWeight ? (data.pass.sDayWeight / 1000).toFixed(0) : 0 }}</span>
-                        <span class="unit">吨</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(181, 188, 253, 1) 26%, rgba(120, 141, 248, 1) 100%)">
-                      <div class="tti">本周</div>
-                      <div class="num">
-                        <span>{{ data.pass.sWeekCar }}</span>
-                        <span class="unit">辆</span>
-                      </div>
-                      <div class="num">
-                        <span>{{ data.pass.sWeekWeight ? (data.pass.sWeekWeight / 1000).toFixed(0) : 0 }}</span>
-                        <span class="unit">吨</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(255, 206, 153, 1) 26%, rgba(250, 168, 113, 1) 100%)">
-                      <div class="tti">本月</div>
-                      <div class="num">
-                        <span>{{ data.pass.sMonthCar }}</span>
-                        <span class="unit">辆</span>
-                      </div>
-                      <div class="num">
-                        <span>{{ data.pass.sMonthWeight ? (data.pass.sMonthWeight / 1000).toFixed(0) : 0 }}</span>
-                        <span class="unit">吨</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
+                <div class="tit">账户信息</div>
               </div>
+              <companyInfo></companyInfo>
             </div>
           </div>
         </div>
-      </div>
-      <!--集装箱过车和重量监控-->
-      <div class="pop" style="width: 60%">
-        <div class="out" style="margin: 0px; margin-top: 5px">
+        <div class="out">
           <div class="int">
             <div class="bos" style="border: 0px">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">
-                  <span>集装箱过车和重量监控</span>
-                  <span class="jz">截至{{ time }}</span>
-                </div>
-              </div>
-              <div class="rows">
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(254, 152, 244, 1) 26%, rgba(255, 114, 233, 1) 100%)">
-                      <div class="tti">本日</div>
-                      <div class="rows">
-                        <div class="row" style="text-align: center; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jDayCarI || 0 }}</span>
-                            <span class="unit">辆(进)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jDayBoxNumI || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                        <div class="row" style="text-align: left; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jDayCarE || 0 }}</span>
-                            <span class="unit">辆(出)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jDayBoxNumE || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(94, 173, 252, 1) 26%, rgba(68, 133, 254, 1) 100%)">
-                      <div class="tti">本周</div>
-                      <div class="rows">
-                        <div class="row" style="text-align: center; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jWeekCarI || 0 }}</span>
-                            <span class="unit">辆(进)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jWeekBoxNumI || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                        <div class="row" style="text-align: left; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jWeekCarE || 0 }}</span>
-                            <span class="unit">辆(出)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jWeekBoxNumE || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(129, 159, 253, 1) 26%, rgba(52, 97, 243, 1) 100%)">
-                      <div class="tti">本月</div>
-                      <div class="rows">
-                        <div class="row" style="text-align: center; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jMonthCarI || 0 }}</span>
-                            <span class="unit">辆(进)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jMonthBoxNumI || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                        <div class="row" style="text-align: left; width: 50%">
-                          <div class="num">
-                            <span>{{ data.pass.jMonthCarE || 0 }}</span>
-                            <span class="unit">辆(出)</span>
-                          </div>
-                          <div class="num">
-                            <span>{{ data.pass.jMonthBoxNumE || 0 }}</span>
-                            <span class="unit">标箱</span>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-                  </div>
-                </div>
+                <div class="tit">账户信息</div>
               </div>
             </div>
           </div>
         </div>
       </div>
-    </div>
-    <!--场内作业车辆实时统计 -->
-    <div class="chart-wrapper">
-      <div class="pop" style="width: 100%">
-        <div class="out" style="margin: 0px; margin-top: 5px">
+      <div class="pop" style="width: 30%">
+        <div class="out" style="margin-right: 0px">
           <div class="int">
             <div class="bos" style="border: 0px">
               <div class="lab">
                 <div class="bsg"></div>
-                <div class="tit">
-                  <span>散货一次性通行概率</span>
-                  <span class="jz">截至{{ time }}</span>
-                </div>
-                <div class="years">
-                  <div class="year active">本周</div>
-                  <div class="year">更多</div>
-                </div>
-              </div>
-              <div class="rows">
-                <div class="row" style="width: 20%">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, rgba(254, 152, 244, 1) 26%, rgba(255, 114, 233, 1) 100%)">
-                      <div class="tti" style="font-size: 20px; padding-top: 20px">场内散货作业车辆</div>
-                      <div class="num" style="padding-top: 20px; padding-bottom: 20px">
-                        <span>{{ data.count.scars || 0 }}</span>
-                        <span class="unit">辆</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row" style="width: 20%">
-                  <el-progress type="circle" :percentage="data.pass.sSuccess ? ((data.pass.sSuccess / data.pass.sDayCar) * 100).toFixed(0) : 0" :stroke-width="15"></el-progress>
-                  <div class="day">本日通行概率</div>
-                </div>
-                <div class="row" style="width: 60%">
-                  <BarChart :chartData="chartData1" type="line" height="160px"></BarChart>
-                </div>
-              </div>
-              <div class="lab" style="margin-top: 20px">
-                <div class="bsg"></div>
-                <div class="tit">
-                  <span>集装箱一次性通行概率</span>
-                  <span class="jz">截至{{ time }}</span>
-                </div>
-              </div>
-              <div class="rows">
-                <div class="row" style="width: 20%">
-                  <div class="ou">
-                    <div class="in" style="background: linear-gradient(90deg, #46a6ff 26%, #81c2ff 100%)">
-                      <div class="tti" style="font-size: 20px; padding-top: 20px">场内集装箱作业车辆</div>
-                      <div class="num" style="padding-top: 15px; padding-bottom: 20px">
-                        <span>{{ data.count.jcars }}</span>
-                        <span class="unit">辆</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-                <div class="row" style="width: 20%">
-                  <el-progress type="circle" :percentage="data.pass.jSuccess ? ((data.pass.jSuccess / data.pass.jDayCarI) * 100).toFixed(0) : 0" :stroke-width="15"></el-progress>
-                  <div class="day">本日通行概率</div>
-                </div>
-                <div class="row" style="width: 60%">
-                  <BarChart :chartData="chartData2" type="line" height="160px"></BarChart>
-                </div>
+                <div class="tit">用户信息</div>
               </div>
             </div>
           </div>
@@ -317,16 +115,16 @@ export default {
   .chart-wrapper {
     margin-top: 12px;
     overflow: hidden;
-    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.07);
-    background: #fff;
-    border-radius: 5px;
     .pop {
       float: left;
       width: 33.33%;
       overflow: hidden;
       .out {
-        margin: 10px;
+        margin: 10px 10px 20px 0px;
         .int {
+          box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+          background: white;
+          border-radius: 5px;
           padding: 15px 15px 10px 15px;
           overflow: hidden;
         }
@@ -337,57 +135,6 @@ export default {
     float: left;
     padding: 0px 10px 0px 10px;
     width: 100%;
-    .years {
-      float: right;
-      margin-top: -30px;
-      overflow: hidden;
-      .year {
-        float: left;
-        padding: 5px 10px;
-        background-color: #f6f6f6;
-        cursor: pointer;
-        font-size: 14px;
-        color: #545555;
-        &.active {
-          background-color: rgb(64, 158, 255);
-          color: white;
-        }
-      }
-    }
-    .rows {
-      overflow: hidden;
-      .row {
-        float: left;
-        width: 33.3333%;
-        text-align: center;
-        .ou {
-          padding: 0px 10px 0px 10px;
-          .in {
-            padding: 10px;
-            text-align: center;
-            color: white;
-            border-radius: 10px;
-            .tti {
-              font-size: 30px;
-              font-weight: bold;
-            }
-            .num {
-              padding-top: 5px;
-              font-size: 22px;
-              .unit {
-                font-size: 15px;
-                padding-left: 5px;
-              }
-            }
-          }
-        }
-        .day {
-          font-size: 18px;
-          padding-top: 7px;
-          color: #838383;
-        }
-      }
-    }
   }
 }
 </style>

+ 92 - 0
admin-ui/src/views/work/contract/edit.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="cmain">
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="合同名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入合同名称" clearable/>
+        </el-form-item>
+        <el-form-item label="合同路径" prop="url">
+          <el-input v-model="form.url" placeholder="请输入合同路径" clearable/>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">
+          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
+        </el-form-item>
+        <el-form-item label="创建者" prop="createBy">
+          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createTime">
+          <el-date-picker clearable
+            v-model="form.createTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择创建时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="更新者" prop="updateBy">
+          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
+        </el-form-item>
+        <el-form-item label="更新时间" prop="updateTime">
+          <el-date-picker clearable
+            v-model="form.updateTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择更新时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+    <div class="mfooter">
+      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      form: {},
+      rules: {
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  mounted() {
+    if (this.param.id) {
+      this.ajax({ url: '/work/contract/detail/' + this.param.id }).then(response => {
+        this.form = response.data;
+      });
+    }
+  },
+  methods: {
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id) {
+              this.ajax({method: 'post',url: '/work/contract/edit', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("修改成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+              });
+          } else {
+              this.ajax({method: 'post',url: '/work/contract/add', data: this.form }).then(response => {
+                  this.$modal.msgSuccess("新增成功");
+                  this.$layer.close(this.layerid);
+                  this.$parent.getList();
+               });
+          }
+        }
+      });
+    }
+  }
+};
+</script>

+ 104 - 0
admin-ui/src/views/work/contract/index.vue

@@ -0,0 +1,104 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="合同名称" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入合同名称"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+      </el-form-item>
+      <el-form-item label="合同路径" prop="url">
+        <el-input v-model="queryParams.url" placeholder="请输入合同路径"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input v-model="queryParams.state" placeholder="请输入状态"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:contract:add']">新增</el-button>
+        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:contract:edit']">修改</el-button>
+        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:contract:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="合同名称" align="center" prop="name" />
+      <el-table-column label="合同路径" align="center" prop="url" />
+      <el-table-column label="状态" align="center" prop="state" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:contract:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:contract:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+          <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
+  </div>
+</template>
+
+<script>
+import edit from './edit'
+export default {
+  name: "Contract",
+  data() {
+    return {
+      ids: [],
+      showSearch:true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        url: null,
+        state: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/contract/list', data: this.queryParams }).then(response => {
+            this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map(item => item.id)
+    },
+    op(tag, row) {
+          if (tag == 'add') {
+            this.iframe({ obj: edit, param: {}, title:'新增',width: '45%', height: '55%'});
+          }
+          if (tag == 'edit') {
+              const id = row.id || this.ids[0];
+              this.iframe({ obj: edit, param: {id: id}, title:'编辑',width: '50%', height: '50%'});
+          }
+    },
+    del(row) {
+        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/contract/remove/' + (row.id || this.ids) }).then(response => {
+                this.$modal.msgSuccess('删除成功');
+                this.getList();
+            });
+        });
+    }
+  }
+};
+</script>

+ 4 - 60
admin-ui/src/views/work/money/index.vue

@@ -1,74 +1,18 @@
 <template>
   <div class="app-container">
     <div class="cmain">
-      <div class="cards">
-        <div class="ctop">
-          <span class="icon">&#xe646;</span>
-          <span class="ctitle">{{ form.companyName }}</span>
-          <span class="ckk" @click="op('info')">查看</span>
-          <img :src="rz" class="rz" />
-          <span class="icon qr" title="点击查看企业二维码" @click="op('qr')">&#xe643;</span>
-        </div>
-        <div class="desc">账户余额(元)</div>
-        <div class="money">{{ form.money }}</div>
-        <el-row :gutter="10" class="btm">
-          <el-button type="primary" icon="el-icon-minus" @click="op('out')" v-hasPermi="['work:out:add']">提现</el-button>
-          <el-button type="primary" icon="el-icon-plus" @click="op('add')" v-hasPermi="['work:recharge:add']">充值</el-button>
-          <el-button type="primary" icon="el-icon-document" @click="op('recharge_list')" v-hasPermi="['work:recharge:list']">充值明细</el-button>
-          <el-button type="primary" icon="el-icon-s-promotion" @click="op('out_list')" v-hasPermi="['work:out:list']">提现明细</el-button>
-        </el-row>
-      </div>
+      <companyInfo :bar="true"></companyInfo>
     </div>
   </div>
 </template>
 
 <script>
-import out_edit from './out/edit.vue';
-import out_list from './out/record.vue';
-import recharge_edit from './recharge/edit.vue';
-import recharge_list from './recharge/record.vue';
-import qr from '@/components/qr';
-import rz from '@/assets/images/rz.png';
-import company from '@/views/work/company/detail.vue';
 export default {
   name: 'Money',
   data() {
-    return {
-      rz: rz,
-      form: {},
-      rules: {
-        serviceCompany: [{ required: true, message: '服务公司不能为空', trigger: 'blur' }],
-        bankName: [{ required: true, message: '开户行不能为空', trigger: 'blur' }],
-        bankAccount: [{ required: true, message: '银行卡号不能为空', trigger: 'blur' }]
-      }
-    };
+    return {};
   },
-  mounted() {
-    this.ajax({ url: '/work/company/index' }).then((response) => {
-      this.form = response.data;
-    });
-  },
-  methods: {
-    op(tag, row) {
-      if (tag == 'info') {
-        this.iframe({ obj: company, param: { id: this.form.id, detail: true }, title: '企业信息', width: '60%', height: '75%' });
-      }
-      if (tag == 'qr') {
-        this.iframe({ obj: qr, param: {}, title: '查看企业二维码', width: '27%', height: '45%' });
-      }
-      if (tag == 'out') {
-        this.iframe({ obj: out_edit, param: {}, title: '提现申请', width: '40%', height: '55%' });
-      }
-      if (tag == 'add') {
-        this.iframe({ obj: recharge_edit, param: {}, title: '充值申请', width: '40%', height: '65%' });
-      }
-      if (tag == 'recharge_list') {
-        this.iframe({ obj: recharge_list, param: {}, title: '充值明细', width: '72%', height: '70%' });
-      }
-      if (tag == 'out_list') {
-        this.iframe({ obj: out_list, param: {}, title: '提现明细', width: '72%', height: '70%' });
-      }
-    }
-  }
+  mounted() {},
+  methods: {}
 };
 </script>

+ 4 - 38
admin-ui/src/views/work/money/out/edit.vue

@@ -16,16 +16,10 @@
       </el-form>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="提现金额" prop="money">
-          <el-input type="number" v-model="form.money" placeholder="请输入充值金额" clearable>
-            <template slot="append">账户余额:{{ company.money }}</template>
-          </el-input>
+          <el-input type="number" v-model="form.money" placeholder="提现金额不能大于账户余额" clearable />
         </el-form-item>
         <el-form-item label="手机号码">
-          <el-input type="number" v-model="company.phone" disabled>
-            <template slot="append">
-              <span @click="getCode()" class="yzm">{{ msg }}</span>
-            </template>
-          </el-input>
+          <sms v-model="user.phone"></sms>
         </el-form-item>
         <el-form-item label="短信验证码" prop="code">
           <el-input type="number" v-model="form.code" />
@@ -43,9 +37,7 @@
 export default {
   data() {
     return {
-      msg: '获取验证码',
-      time: 60,
-      flag: true,
+      user: this.$store.state.user,
       company: {},
       form: {},
       rules: {
@@ -66,35 +58,9 @@ export default {
     }
   },
   mounted() {
-    this.ajax({ url: '/work/company/index' }).then((response) => {
-      this.company = response.data;
-    });
-    if (this.param.id) {
-      this.ajax({ url: '/work/out/detail/' + this.param.id }).then((response) => {
-        this.form = response.data;
-      });
-    }
+    this.company = this.param.company;
   },
   methods: {
-    getCode() {
-      if (!this.flag) {
-        return;
-      }
-      this.$modal.msgSuccess('你的验证码是123456');
-      //一分钟倒计时
-      var countdown = setInterval(() => {
-        this.time--;
-        if (this.time == 0) {
-          this.flag = true;
-          this.msg = '获取短信';
-          this.time = 60;
-          clearInterval(countdown);
-        } else {
-          this.flag = false;
-          this.msg = '重新获取(' + this.time + ')';
-        }
-      }, 1000);
-    },
     submitForm() {
       this.$refs['form'].validate((valid) => {
         if (valid) {

+ 3 - 9
admin-ui/src/views/work/statement/give/index.vue

@@ -8,9 +8,7 @@
         <el-input v-model="queryParams.batchName" placeholder="请输入结算批次" @keyup.enter.native="handleQuery" clearable />
       </el-form-item>
       <el-form-item label="关联项目" prop="projectId">
-        <el-select v-model="queryParams.projectId" placeholder="请选择关联项目" class="se" clearable>
-          <el-option v-for="dict in projectList" :key="dict.projectName" :label="dict.projectName" :value="dict.id"></el-option>
-        </el-select>
+        <projectSelect v-model="queryParams.projectId"></projectSelect>
       </el-form-item>
       <el-form-item label="审核状态" prop="audit">
         <el-select v-model="queryParams.audit" placeholder="充值状态" class="se" clearable>
@@ -24,7 +22,7 @@
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 235px)">
+    <el-table :data="response.rows" border height="calc(100vh - 235px)">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column type="index" label="序号" align="center" width="80" />
       <el-table-column label="结算单号" align="center" prop="num" width="160" />
@@ -47,7 +45,7 @@
       <el-table-column label="操作" align="center" width="200">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)">详情</el-button>
-          <el-button size="mini" type="text" icon="el-icon-s-promotion" @click="op('send', scope.row)" >发放</el-button>
+          <el-button size="mini" type="text" icon="el-icon-s-promotion" @click="op('send', scope.row)">发放</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
@@ -64,7 +62,6 @@ import send from './send';
 export default {
   data() {
     return {
-      projectList: [],
       response: {},
       queryParams: {
         pageNum: 1,
@@ -79,9 +76,6 @@ export default {
     };
   },
   created() {
-    this.ajax({ url: '/work/project/selectAll' }).then((response) => {
-      this.projectList = response.data;
-    });
     this.getList();
   },
   methods: {

+ 3 - 41
admin-ui/src/views/work/statement/give/send.vue

@@ -1,16 +1,6 @@
 <template>
   <div class="cmain">
-    <div class="cards">
-      <div class="ctop">
-        <span class="icon">&#xe646;</span>
-        <span class="ctitle">{{ company.companyName }}</span>
-        <span class="ckk" @click="op('info')">查看</span>
-        <img :src="rz" class="rz" />
-        <span class="icon qr" title="点击查看企业二维码" @click="op('qr')">&#xe643;</span>
-      </div>
-      <div class="desc">账户余额(元)</div>
-      <div class="money">{{ company.money }}</div>
-    </div>
+    <companyInfo></companyInfo>
     <el-table :data="[param.row]" border style="margin-top: 13px; margin-bottom: 13px">
       <el-table-column label="结算单号" align="center" prop="num" />
       <el-table-column label="应发人数" align="center" prop="peoples" />
@@ -30,11 +20,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="手机号码">
-              <el-input type="number" v-model="company.phone" disabled>
-                <template slot="append">
-                  <span @click="getCode()" class="yzm">{{ msg }}</span>
-                </template>
-              </el-input>
+              <sms v-model="user.phone"></sms>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -53,15 +39,10 @@
 </template>
 
 <script>
-import rz from '@/assets/images/rz.png';
 export default {
   data() {
     return {
-      rz: rz,
-      msg: '获取验证码',
-      time: 60,
-      flag: true,
-      company: {},
+      user: this.$store.state.user,
       form: {},
       rules: {
         code: [{ required: true, message: '短信验证码不能为空', trigger: 'blur' }]
@@ -85,25 +66,6 @@ export default {
     });
   },
   methods: {
-    getCode() {
-      if (!this.flag) {
-        return;
-      }
-      this.$modal.msgSuccess('你的验证码是123456');
-      //一分钟倒计时
-      var countdown = setInterval(() => {
-        this.time--;
-        if (this.time == 0) {
-          this.flag = true;
-          this.msg = '获取短信';
-          this.time = 60;
-          clearInterval(countdown);
-        } else {
-          this.flag = false;
-          this.msg = '重新获取(' + this.time + ')';
-        }
-      }, 1000);
-    },
     submitForm() {
       this.$refs['form'].validate((valid) => {
         if (valid) {

+ 66 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/ContractController.java

@@ -0,0 +1,66 @@
+package com.ruoyi.web.work.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.web.work.domain.Contract;
+import com.ruoyi.web.work.service.IContractService;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 合同模板
+ * @author lsw
+ * @date 2024-04-22
+ */
+@RestController
+@RequestMapping("/work/contract")
+public class ContractController extends BaseController {
+    @Autowired
+    private IContractService contractService;
+
+    @PreAuthorize("@ss.hasPermi('work:contract:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Contract contract){
+        startPage();
+        List<Contract> list = contractService.selectList(contract);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:contract:query')")
+    @GetMapping(value = "/detail/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id){
+        return AjaxResult.success(contractService.getById(id));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:contract:add')")
+    @Log(title = "合同模板", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody Contract contract){
+        return toAjax(contractService.save(contract));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:contract:edit')")
+    @Log(title = "合同模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody Contract contract){
+        return toAjax(contractService.updateById(contract));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:contract:remove')")
+    @Log(title = "合同模板", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids){
+        return toAjax(contractService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 47 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Contract.java

@@ -0,0 +1,47 @@
+package com.ruoyi.web.work.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.experimental.Accessors;
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+@Data
+@TableName(value = "tb_contract")
+@Accessors(chain = true)
+public class Contract{
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "合同名称")
+    private String name;
+
+    @ApiModelProperty(value = "合同路径")
+    private String url;
+
+    @ApiModelProperty(value = "状态:0=正常,1=停用")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+
+}

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/ContractMapper.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.mapper;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.Contract;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+public interface ContractMapper extends BaseMapper<Contract> {
+    List<Contract> selectList(Contract contract);
+}

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IContractService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.service;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.Contract;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+public interface IContractService extends IService<Contract>{
+    List<Contract> selectList(Contract contract);
+}

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java

@@ -65,6 +65,7 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         user.setType(1);
         user.setNickName(company.getDirector());
         user.setCompanyId(company.getId());
+        user.setPhonenumber(company.getPhone());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
             throw new ServerException("新增用户'" + user.getUserName() + "'失败,登录账号已存在");

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/ContractServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ruoyi.web.work.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.web.work.mapper.ContractMapper;
+import com.ruoyi.web.work.domain.Contract;
+import com.ruoyi.web.work.service.IContractService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @author lsw
+ * @date 2024-04-22
+ */
+@Service
+public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements IContractService {
+    @Autowired
+    private ContractMapper contractMapper;
+
+    @Override
+    public List<Contract> selectList(Contract contract) {
+        return contractMapper.selectList(contract);
+    }
+}

+ 16 - 0
ruoyi-admin/src/main/resources/mapper/work/ContractMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.web.work.mapper.ContractMapper">
+    
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.Contract">
+        select * from tb_contract
+        <where>  
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="url != null  and url != ''"> and url = #{url}</if>
+            <if test="state != null "> and state = #{state}</if>
+        </where>
+    </select>
+
+</mapper>