first commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">合同分类</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同分类名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入合同分类名称" lay-reqText="请输入合同分类名称"class="layui-input" value="{$detail.title|default=''}">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/cate/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_contract_cate" lay-filter="table_contract_cate"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加合同分类</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract_cate"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/contract/cate/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract_cate)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/cate/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/cate/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/cate/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">合同分类详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同分类名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,261 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" value="" lay-verify="required" lay-reqText="请输入合同名称" autocomplete="off" placeholder="请输入合同名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>
|
||||
<input type="hidden" name="types" value="{$types}">
|
||||
{eq name="$types" value="1" }普通合同{/eq}
|
||||
{eq name="$types" value="2" }产品合同{/eq}
|
||||
{eq name="$types" value="3" }服务合同{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">签约主体<span style="font-size:12px;">(乙方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择签约主体公司">
|
||||
<option value="">请选择签约主体公司</option>
|
||||
{volist name=":get_base_data('Enterprise')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同始止日期<font>*</font></td>
|
||||
<td id="barDate" style="width:320px;">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="start_time" value="" placeholder="选择时间区间" readonly name="start_time" lay-verify="required" lay-reqText="请选择合同开始时间">
|
||||
</div>
|
||||
~
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="end_time" value="" placeholder="选择时间区间" readonly name="end_time" lay-verify="required" lay-reqText="请选择合同结束时间">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称<span style="font-size:12px;">(甲方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
{eq name="$is_customer" value="1"}
|
||||
<input type="text" name="customer" autocomplete="off" value="" readonly lay-verify="required" lay-reqText="请输入客户名称" placeholder="请输入客户名称" class="layui-input customer-picker">
|
||||
{else/}
|
||||
<input type="text" name="customer" autocomplete="off" value="" lay-verify="required" lay-reqText="请输入客户名称" placeholder="请输入客户名称" class="layui-input">
|
||||
{/eq}
|
||||
<input type="hidden" name="customer_id" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray">签约客户代表<font>*</font></td>
|
||||
<td><input type="text" name="contact_name" value="" autocomplete="off" lay-verify="required" lay-reqText="请输入客户代表姓名" placeholder="请输入客户代表姓名" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">客户联系地址</td>
|
||||
<td colspan="3"><input type="text" name="contact_address" value="" autocomplete="off" placeholder="请输入客户联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray">客户联系电话</td>
|
||||
<td><input type="text" name="contact_mobile" value="" autocomplete="off" placeholder="请输入客户联系电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">关联机会线索</td>
|
||||
<td colspan="5">
|
||||
<input type="text" value="" readonly autocomplete="off" placeholder="请选择" class="layui-input chance-picker">
|
||||
<input type="hidden" name="chance_id" value="0">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额<font>*</font></td>
|
||||
<td>
|
||||
{eq name="$types" value="1"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请输入合同金额,数字" placeholder="请输入合同金额,数字" autocomplete="off" class="layui-input">
|
||||
{/eq}
|
||||
{eq name="$types" value="2"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请完善产品信息" placeholder="完善产品信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
{eq name="$types" value="3"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请完善服务信息" placeholder="完善服务信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">合同类别<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择合同类别">
|
||||
<option value="">请选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">合同编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$codeno}" autocomplete="off" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" lay-reqText="请输入合同编号" placeholder="请输入合同编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_name" value="" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同签订人" placeholder="请选择合同签订人" class="layui-input picker-diy">
|
||||
<input type="hidden" name="sign_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同所属部门<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_department" value="" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同所属部门" placeholder="请选择合同所属部门" class="layui-input picker-oa" data-types="department">
|
||||
<input type="hidden" name="did" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同签订日期<font>*</font></td>
|
||||
<td><input type="text" name="sign_time" value="" readonly lay-verify="required" lay-reqText="请选择合同签订日期" placeholder="请选择合同签订日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>
|
||||
<input type="text" name="prepared_name" value="" readonly placeholder="请选择合同制定人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="prepared_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>
|
||||
<input type="text" name="keeper_name" value="" readonly placeholder="请选择合同保管人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="keeper_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="share_names" value="" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids" value="">
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$types" value="2"}{include file="/contract/add_product"}{/eq}
|
||||
{eq name="$types" value="3"}{include file="/contract/add_service"}{/eq}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<button type="button" class="layui-btn layui-btn-sm" id="uploadBtn"><i class="layui-icon"></i>附件上传</button>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" id="fileBoxInput" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="scene" value="add">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate, oaPicker = layui.oaPicker,uploadPlus = layui.uploadPlus;
|
||||
if(typeof product_fun==='function'){
|
||||
product_fun(layui);
|
||||
}
|
||||
if(typeof service_fun==='function'){
|
||||
service_fun(layui);
|
||||
}
|
||||
//日期范围
|
||||
laydate.render({
|
||||
elem: '#barDate',
|
||||
range: ['#start_time', '#end_time']
|
||||
});
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//选择员工弹窗
|
||||
$('body').on('click','.picker-diy',function () {
|
||||
let that = $(this);
|
||||
let ids=that.next().val()+'',names = that.val()+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
//这里是选择后的回调方法,可以根据具体需求自定义写哦
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
that.val(select_name.join(','));
|
||||
that.next().val(select_id.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择客户弹窗
|
||||
$('body').on('click','.customer-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],contact_name=[],contact_mobile=[],address=[],map = {},types = 'customer',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
contact_name.push(data[i].contact_name);
|
||||
contact_mobile.push(data[i].contact_mobile);
|
||||
address.push(data[i].address);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
$('[name="contact_name"]').val(contact_name.join(','));
|
||||
$('[name="contact_mobile"]').val(contact_mobile.join(','));
|
||||
$('[name="contact_address"]').val(address.join(','));
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//选择销售机会弹窗
|
||||
$('body').on('click','.chance-picker',function () {
|
||||
let customer_id = $('[name="customer_id"]').val();
|
||||
if(customer_id==0){
|
||||
layer.msg('请先选择客户');
|
||||
return false;
|
||||
}
|
||||
let that = $(this),ids = [],titles=[],map = {cid:customer_id};
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
}
|
||||
let opts={
|
||||
"title":"选择机会线索",
|
||||
"url": "/customer/api/get_chance",
|
||||
"ids":"",
|
||||
"titles":"",
|
||||
"area": ['720px', '580px'],
|
||||
"cols":[{field: 'id',width: 80,title:'序号',align:'center'},{field:'title',title:'机会主题'},{field:'expected_amount',title:'预计签单金额',width: 100},{field:'expected_time',title:'预计签单日期',width: 100}]
|
||||
}
|
||||
oaPicker.picker(opts,1,callback,map);
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/contract/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,116 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>产品信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="productAdd">+ 添加产品</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="productTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">产品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">销售单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
<tr class="product-tr">
|
||||
{eq name="is_product" value="1"}
|
||||
<td><input type="text" name="product_title[]" value="" class="layui-input product-picker" readonly lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="product_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="product_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="product_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入产品规格"></td>
|
||||
<td><input type="text" name="product_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入销售单价"></td>
|
||||
<td><input type="text" name="product_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入产品数量"></td>
|
||||
<td><input type="text" name="product_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="product_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_product={$is_product};
|
||||
function product_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.product-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],sale_price=[],unit=[],specs=[],map = {},types = 'product',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
unit.push(data[i].unit);
|
||||
specs.push(data[i].specs);
|
||||
sale_price.push(data[i].sale_price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.product-tr').find('input').eq(2).val(unit.join(','));
|
||||
that.parents('.product-tr').find('input').eq(3).val(specs.join(','));
|
||||
that.parents('.product-tr').find('input').eq(4).val(sale_price.join(','));
|
||||
that.parents('.product-tr').find('input').eq(6).val(sale_price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加产品信息表格
|
||||
$('#productAdd').on('click',function(){
|
||||
var html = '',product_title=' class="layui-input"';
|
||||
if(is_product==1){
|
||||
product_title=' class="layui-input product-picker" readonly';
|
||||
}
|
||||
html += '<tr class="product-tr">\
|
||||
<td><input type="text" name="product_title[]" value="" '+product_title+' lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>\
|
||||
<td><input type="text" name="product_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>\
|
||||
<td><input type="text" name="product_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入产品规格"></td>\
|
||||
<td><input type="text" name="product_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入销售单价"></td>\
|
||||
<td><input type="text" name="product_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入产品数量"></td>\
|
||||
<td><input type="text" name="product_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="product_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#productTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#productTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.product-tr').length<2){
|
||||
layer.msg('至少保留一个产品选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.product-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#productTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.product-tr').find("input");
|
||||
var product_price = inputs.eq(4).val();
|
||||
var product_num = inputs.eq(5).val();
|
||||
var product_amount = (product_price*product_num).toFixed(2);
|
||||
if(isNaN(product_amount)){
|
||||
product_amount = 0.00;
|
||||
}
|
||||
inputs.eq(6).val(product_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var product_subtotal = $('#productTable').find('[name="product_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < product_subtotal.length; m++) {
|
||||
total+=$(product_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,109 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="serviceAdd">+ 添加服务</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="serviceTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
<tr class="service-tr">
|
||||
{eq name="is_service" value="1"}
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input service-picker" readonly lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_service={$is_service};
|
||||
function product_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.service-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],price=[],map = {},types = 'services',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
price.push(data[i].price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.service-tr').find('input').eq(3).val(price.join(','));
|
||||
that.parents('.service-tr').find('input').eq(5).val(price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加服务信息表格
|
||||
$('#serviceAdd').on('click',function(){
|
||||
var html = '',service_title=' class="layui-input"';
|
||||
if(is_service==1){
|
||||
service_title=' class="layui-input service-picker" readonly';
|
||||
}
|
||||
html += '<tr class="service-tr">\
|
||||
<td><input type="text" name="service_title[]" value="" '+service_title+' lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>\
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>\
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>\
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>\
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#serviceTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#serviceTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.service-tr').length<2){
|
||||
layer.msg('至少保留一个服务选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.service-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#serviceTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.service-tr').find("input");
|
||||
var service_price = inputs.eq(3).val();
|
||||
var service_num = inputs.eq(4).val();
|
||||
var service_amount = (service_price*service_num).toFixed(2);
|
||||
if(isNaN(service_amount)){
|
||||
service_amount = 0.00;
|
||||
}
|
||||
inputs.eq(5).val(service_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var service_subtotal = $('#serviceTable').find('[name="service_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < service_subtotal.length; m++) {
|
||||
total+=$(service_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,34 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td>选择合同性质</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="layui-btn-group">
|
||||
<a href="/contract/contract/add?types=1" class="layui-btn">普通合同</a>
|
||||
<a href="/contract/contract/add?types=2" class="layui-btn">产品合同</a>
|
||||
<a href="/contract/contract/add?types=3" class="layui-btn">服务合同</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
{block name="copyright"}{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,178 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this"><a href="/contract/contract/archivelist">销售合同</a></li>
|
||||
<li><a href="/contract/purchase/archivelist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通合同</option>
|
||||
<option value="2">产品合同</option>
|
||||
<option value="3">服务合同</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>归档合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const delay_num = {$delay_num|default=30};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/contract/archivelist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/contract/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < delay_num) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'archive_name',
|
||||
title: '归档人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'archive_time',
|
||||
title: '归档日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/contract/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,258 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform" lay-filter="barsearchform">
|
||||
{gt name="$is_auth" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:90px;">
|
||||
<input type="text" name="username" placeholder="选择签定人" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{else/}
|
||||
{gt name="$is_leader" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:90px;">
|
||||
<input type="text" name="username" placeholder="选择签定人" class="layui-input picker-sub" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{/gt}
|
||||
{/gt}
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通合同</option>
|
||||
<option value="2">产品合同</option>
|
||||
<option value="3">服务合同</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<input type="hidden" name="order_field" value=''>
|
||||
<input type="hidden" name="order_type" value=''>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="add">
|
||||
<span>+ 添加合同</span>
|
||||
<i class="layui-icon layui-icon-down layui-font-12"></i>
|
||||
</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const delay_num = {$delay_num|default=30};
|
||||
const contract_types = [{"id":1,"title":"普通合同"},{"id":2,"title":"产品合同"},{"id":3,"title":"服务合同"}];
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,form = layui.form,dropdown = layui.dropdown,element = layui.element, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
let searchObject = form.val('barsearchform');
|
||||
layui.pageTable.reload({where:searchObject,page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
,title: "销售合同列表"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/contract/contract/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,autoSort: false
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 80
|
||||
},{ field: 'check_status', title: '审批状态', align: 'center', width: 110, templet: function (d) {
|
||||
var html = '<span class="check-status-color-' + d.check_status + '">『' + d.status_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/contract/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'end_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
sort: true,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < delay_num) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 100
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 120,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
if(d.check_status==0 || d.check_status==4){
|
||||
return html+btn0+btn1+btn2+'</div>';
|
||||
}
|
||||
else{
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(table_contract)', function(obj){
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = checkStatus.data;
|
||||
var that = this;
|
||||
if (obj.event === 'add'){
|
||||
dropdown.render({
|
||||
elem: that,
|
||||
show: true, // 外部事件触发即显示
|
||||
data: contract_types,
|
||||
click: function(obj){
|
||||
tool.side("/contract/contract/add?types="+obj.id);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/contract/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/contract/contract/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该合同吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/contract/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,262 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" value="{$detail.name}" lay-verify="required" lay-reqText="请输入合同名称" autocomplete="off" placeholder="请输入合同名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>{$detail.types_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">签约主体<span style="font-size:12px;">(乙方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择签约主体公司">
|
||||
<option value="">请选择签约主体公司</option>
|
||||
{volist name=":get_base_data('Enterprise')" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.subject_id" } selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同始止日期<font>*</font></td>
|
||||
<td id="barDate" style="width:320px;">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="start_time" value="{$detail.start_time}" placeholder="选择时间区间" readonly name="start_time" lay-verify="required" lay-reqText="请选择合同开始时间">
|
||||
</div>
|
||||
~
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="end_time" value="{$detail.end_time}" placeholder="选择时间区间" readonly name="end_time" lay-verify="required" lay-reqText="请选择合同结束时间">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称<span style="font-size:12px;">(甲方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
{eq name="$is_customer" value="1"}
|
||||
<input type="text" name="customer" autocomplete="off" value="{$detail.customer}" readonly lay-verify="required" lay-reqText="请输入客户名称" placeholder="请输入客户名称" class="layui-input customer-picker">
|
||||
{else/}
|
||||
<input type="text" name="customer" autocomplete="off" value="{$detail.customer}" lay-verify="required" lay-reqText="请输入客户名称" placeholder="请输入客户名称" class="layui-input">
|
||||
{/eq}
|
||||
<input type="hidden" name="customer_id" value="{$detail.customer_id}">
|
||||
</td>
|
||||
<td class="layui-td-gray">签约客户代表<font>*</font></td>
|
||||
<td><input type="text" name="contact_name" value="{$detail.contact_name}" autocomplete="off" lay-verify="required" lay-reqText="请输入客户代表姓名" placeholder="请输入客户代表姓名" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">客户联系地址</td>
|
||||
<td colspan="3"><input type="text" name="contact_address" value="{$detail.contact_address}" autocomplete="off" placeholder="请输入客户联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray">客户联系电话</td>
|
||||
<td><input type="text" name="contact_mobile" value="{$detail.contact_mobile}" autocomplete="off" placeholder="请输入客户联系电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">关联机会线索</td>
|
||||
<td colspan="5">
|
||||
<input type="text" value="{$detail.chance|default=''}" readonly autocomplete="off" placeholder="请选择" class="layui-input chance-picker">
|
||||
<input type="hidden" name="chance_id" value="{$detail.chance_id}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额<font>*</font></td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请输入合同金额,数字" placeholder="请输入合同金额,数字" autocomplete="off" class="layui-input">
|
||||
{/eq}
|
||||
{eq name="$detail.types" value="2"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请完善产品信息" placeholder="完善产品信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
{eq name="$detail.types" value="3"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请完善服务信息" placeholder="完善服务信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">合同类别<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择合同类别">
|
||||
<option value="">请选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.cate_id"} selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">合同编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$detail.code}" autocomplete="off" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" lay-reqText="请输入合同编号" placeholder="请输入合同编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_name" value="{$detail.sign_name}" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同签订人" placeholder="请选择合同签订人" class="layui-input picker-diy">
|
||||
<input type="hidden" name="sign_uid" value="{$detail.sign_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同所属部门<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_department" value="{$detail.sign_department}" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同所属部门" placeholder="请选择合同所属部门" class="layui-input picker-oa" data-types="department">
|
||||
<input type="hidden" name="did" value="{$detail.did}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同签订日期<font>*</font></td>
|
||||
<td><input type="text" name="sign_time" value="{$detail.sign_time}" readonly lay-verify="required" lay-reqText="请选择合同签订日期" placeholder="请选择合同签订日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>
|
||||
<input type="text" name="prepared_name" value="{$detail.prepared_name}" autocomplete="off" readonly placeholder="请选择合同制定人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="prepared_uid" value="{$detail.prepared_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>
|
||||
<input type="text" name="keeper_name" value="{$detail.keeper_name}" autocomplete="off" readonly placeholder="请选择合同保管人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="keeper_uid" value="{$detail.keeper_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="share_names" value="{$detail.share_names}" autocomplete="off" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids" value="{$detail.share_ids}">
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$detail.types" value="2"}{include file="/contract/edit_product"}{/eq}
|
||||
{eq name="$detail.types" value="3"}{include file="/contract/edit_service"}{/eq}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<button type="button" class="layui-btn layui-btn-sm" id="uploadBtn"><i class="layui-icon"></i>附件上传</button>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<input type="hidden" name="types" value="{$detail.types}">
|
||||
<input type="hidden" name="scene" value="edit">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate, oaPicker = layui.oaPicker,uploadPlus = layui.uploadPlus;
|
||||
if(typeof product_fun==='function'){
|
||||
product_fun(layui);
|
||||
}
|
||||
if(typeof service_fun==='function'){
|
||||
service_fun(layui);
|
||||
}
|
||||
//日期范围
|
||||
laydate.render({
|
||||
elem: '#barDate',
|
||||
range: ['#start_time', '#end_time']
|
||||
});
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
//选择员工弹窗
|
||||
$('body').on('click','.picker-diy',function () {
|
||||
let that = $(this);
|
||||
let ids=that.next().val()+'',names = that.val()+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
//这里是选择后的回调方法,可以根据具体需求自定义写哦
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
that.val(select_name.join(','));
|
||||
that.next().val(select_id.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择客户弹窗
|
||||
$('body').on('click','.customer-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],contact_name=[],contact_mobile=[],address=[],map = {},types = 'customer',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].name);
|
||||
contact_name.push(data[i].contact_name);
|
||||
contact_mobile.push(data[i].contact_mobile);
|
||||
address.push(data[i].address);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
$('[name="contact_name"]').val(contact_name.join(','));
|
||||
$('[name="contact_mobile"]').val(contact_mobile.join(','));
|
||||
$('[name="contact_address"]').val(address.join(','));
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//选择销售机会弹窗
|
||||
$('body').on('click','.chance-picker',function () {
|
||||
let customer_id = $('[name="customer_id"]').val();
|
||||
if(customer_id==0){
|
||||
layer.msg('请先选择客户');
|
||||
return false;
|
||||
}
|
||||
let that = $(this),ids = [],titles=[],map = {cid:customer_id};
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
}
|
||||
let opts={
|
||||
"title":"选择机会线索",
|
||||
"url": "/customer/api/get_chance",
|
||||
"ids":"",
|
||||
"titles":"",
|
||||
"area": ['720px', '580px'],
|
||||
"cols":[{field: 'id',width: 80,title:'序号',align:'center'},{field:'title',title:'机会主题'},{field:'expected_amount',title:'预计签单金额',width: 100},{field:'expected_time',title:'预计签单日期',width: 100}]
|
||||
}
|
||||
oaPicker.picker(opts,1,callback,map);
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/contract/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,135 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>产品信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="productAdd">+ 添加产品</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="productTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">产品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">销售单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="product-tr">
|
||||
{eq name="is_product" value="1"}
|
||||
<td><input type="text" name="product_title[]" value="" class="layui-input product-picker" readonly lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="product_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="product_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="product_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入产品规格"></td>
|
||||
<td><input type="text" name="product_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入销售单价"></td>
|
||||
<td><input type="text" name="product_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入产品数量"></td>
|
||||
<td><input type="text" name="product_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="product_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="product-tr">
|
||||
{eq name="is_product" value="1"}
|
||||
<td><input type="text" name="product_title[]" value="{$vo.product_title|default=''}" class="layui-input product-picker" readonly lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="{$vo.product_id|default=0}"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="product_title[]" value="{$vo.product_title|default=''}" class="layui-input" lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="{$vo.product_id|default=0}"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="product_unit[]" value="{$vo.product_unit|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="product_specs[]" value="{$vo.product_specs|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入产品规格"></td>
|
||||
<td><input type="text" name="product_price[]" value="{$vo.product_price|default='0.00'}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入销售单价"></td>
|
||||
<td><input type="text" name="product_num[]" value="{$vo.product_num|default=0}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入产品数量"></td>
|
||||
<td><input type="text" name="product_subtotal[]" value="{$vo.product_subtotal|default='0.00'}" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="product_remark[]" value="{$vo.product_remark|default=''}" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_product={$is_product};
|
||||
function product_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.product-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],sale_price=[],unit=[],specs=[],map = {},types = 'product',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
unit.push(data[i].unit);
|
||||
specs.push(data[i].specs);
|
||||
sale_price.push(data[i].sale_price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.product-tr').find('input').eq(2).val(unit.join(','));
|
||||
that.parents('.product-tr').find('input').eq(3).val(specs.join(','));
|
||||
that.parents('.product-tr').find('input').eq(4).val(sale_price.join(','));
|
||||
that.parents('.product-tr').find('input').eq(6).val(sale_price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加产品信息表格
|
||||
$('#productAdd').on('click',function(){
|
||||
var html = '',product_title=' class="layui-input"';
|
||||
if(is_product==1){
|
||||
product_title=' class="layui-input product-picker" readonly';
|
||||
}
|
||||
html += '<tr class="product-tr">\
|
||||
<td><input type="text" name="product_title[]" value="" '+product_title+' lay-verify="required" lay-reqText="请完善产品名称"><input type="hidden" name="product_id[]" value="0"></td>\
|
||||
<td><input type="text" name="product_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>\
|
||||
<td><input type="text" name="product_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入产品规格"></td>\
|
||||
<td><input type="text" name="product_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入销售单价"></td>\
|
||||
<td><input type="text" name="product_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入产品数量"></td>\
|
||||
<td><input type="text" name="product_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="product_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#productTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#productTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.product-tr').length<2){
|
||||
layer.msg('至少保留一个产品选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.product-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#productTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.product-tr').find("input");
|
||||
var product_price = inputs.eq(4).val();
|
||||
var product_num = inputs.eq(5).val();
|
||||
var product_amount = (product_price*product_num).toFixed(2);
|
||||
if(isNaN(product_amount)){
|
||||
product_amount = 0.00;
|
||||
}
|
||||
inputs.eq(6).val(product_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var product_subtotal = $('#productTable').find('[name="product_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < product_subtotal.length; m++) {
|
||||
total+=$(product_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,127 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="serviceAdd">+ 添加服务</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="serviceTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="service-tr">
|
||||
{eq name="is_service" value="1"}
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input service-picker" readonly lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="service-tr">
|
||||
{eq name="is_service" value="1"}
|
||||
<td><input type="text" name="service_title[]" value="{$vo.service_title|default=''}" class="layui-input service-picker" readonly lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="{$vo.service_id|default='0'}"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="service_title[]" value="{$vo.service_title|default=''}" class="layui-input" lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="{$vo.service_id|default='0'}"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="service_date[]" value="{$vo.service_date|default=''}" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="{$vo.service_price|default='0.00'}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="{$vo.service_num|default=0}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="{$vo.service_subtotal|default='0.00'}" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="{$vo.service_remark|default=''}" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_service={$is_service};
|
||||
function product_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.service-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],price=[],map = {},types = 'services',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
price.push(data[i].price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.service-tr').find('input').eq(3).val(price.join(','));
|
||||
that.parents('.service-tr').find('input').eq(5).val(price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加服务信息表格
|
||||
$('#serviceAdd').on('click',function(){
|
||||
var html = '',service_title=' class="layui-input"';
|
||||
if(is_service==1){
|
||||
service_title=' class="layui-input service-picker" readonly';
|
||||
}
|
||||
html += '<tr class="service-tr">\
|
||||
<td><input type="text" name="service_title[]" value="" '+service_title+' lay-verify="required" lay-reqText="请完善服务名称"><input type="hidden" name="service_id[]" value="0"></td>\
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>\
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>\
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>\
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#serviceTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#serviceTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.service-tr').length<2){
|
||||
layer.msg('至少保留一个服务选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.service-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#serviceTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.service-tr').find("input");
|
||||
var service_price = inputs.eq(3).val();
|
||||
var service_num = inputs.eq(4).val();
|
||||
var service_amount = (service_price*service_num).toFixed(2);
|
||||
if(isNaN(service_amount)){
|
||||
service_amount = 0.00;
|
||||
}
|
||||
inputs.eq(5).val(service_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var service_subtotal = $('#serviceTable').find('[name="service_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < service_subtotal.length; m++) {
|
||||
total+=$(service_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,177 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this"><a href="/contract/contract/stoplist">销售合同</a></li>
|
||||
<li><a href="/contract/purchase/stoplist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通合同</option>
|
||||
<option value="2">产品合同</option>
|
||||
<option value="3">服务合同</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>中止合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/contract/stoplist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/contract/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < 30) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'stop_name',
|
||||
title: '中止人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'stop_time',
|
||||
title: '中止日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/contract/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,448 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-tab-title .layui-this{background-color:#fff;}
|
||||
.layui-tab-card,.layui-card{box-shadow:0 0 0 0 rgb(0 0 0 / 10%); border-radius:0; border-top:none;}
|
||||
#checkBox .pb-2{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-2">合同详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称</td>
|
||||
<td colspan="3">{$detail.name}</td>
|
||||
<td class="layui-td-gray">合同编号</td>
|
||||
<td>{$detail.code}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">签约主体<span style="font-size:12px;">(乙方)</span></td>
|
||||
<td colspan="3">{$detail.subject_title}</td>
|
||||
<td class="layui-td-gray-2">合同始止日期</td>
|
||||
<td>{$detail.start_time} 至 {$detail.end_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称<span style="font-size:12px;">(甲方)</span></td>
|
||||
<td colspan="3">{$detail.customer}</td>
|
||||
<td class="layui-td-gray">签约客户代表</td>
|
||||
<td>{$detail.contact_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">客户联系地址</td>
|
||||
<td colspan="3">{$detail.contact_address|default='-'}</td>
|
||||
<td class="layui-td-gray">客户联系电话</td>
|
||||
<td>{$detail.contact_mobile|default='-'}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.chance"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联机会线索</td>
|
||||
<td colspan="5">{$detail.chance} <span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/customer/chance/view/?id={$detail.chance_id}">详情</span></td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额</td>
|
||||
<td>{$detail.cost}</td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>{$detail.types_name}</td>
|
||||
<td class="layui-td-gray">合同类别</td>
|
||||
<td>{$detail.cate_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人</td>
|
||||
<td>{$detail.sign_name}</td>
|
||||
<td class="layui-td-gray-2">合同所属部门</td>
|
||||
<td>{$detail.sign_department}</td>
|
||||
<td class="layui-td-gray-2">合同签订日期</td>
|
||||
<td>{$detail.sign_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>{$detail.prepared_name|default='-'}</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>{$detail.keeper_name|default='-'} <span id="keeper" data-ids="{$detail.keeper_uid}" data-names="{$detail.keeper_name}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span></td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">{$detail.share_names|default='-'} <span id="shares" data-ids="{$detail.share_ids}" data-names="{$detail.share_names}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span></td>
|
||||
</tr>
|
||||
{eq name="$detail.types" value="2"}{include file="/contract/view_product"}{/eq}
|
||||
{eq name="$detail.types" value="3"}{include file="/contract/view_service"}{/eq}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
{notempty name="$detail.invoice"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>申请开票记录</strong>『 已申请开票金额:<strong class="green">{$detail.has_invoice}</strong> 元,未申请开票金额:<strong class="red">{$detail.no_invoice}</strong> 元 』</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th style="width:60px;">序号</th>
|
||||
<th style="width:150px;">发票金额(元)</th>
|
||||
<th style="width:150px;">发票状态</th>
|
||||
<th style="width:200px;">发票号码</th>
|
||||
<th style="width:150px;">发票日期</th>
|
||||
<th style="width:100px;">回款状态</th>
|
||||
<th style="width:100px;">申请人</th>
|
||||
<th style="width:150px;">申请时间</th>
|
||||
<th style="width:60px;">操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.invoice" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td><span class="green">{$vo.amount}</span></td>
|
||||
{eq name="$vo.open_status" value="1"}
|
||||
<td><span class="green">已开具</span></td>
|
||||
<td>{$vo.code}</td>
|
||||
<td>{$vo.open_time|date='Y-m-d'}</td>
|
||||
{else/}
|
||||
<td><span class="red">未开具</span></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
{/eq}
|
||||
<td>
|
||||
{eq name="$vo.enter_status" value="0"}<span class="red">未回款</span>{/eq}
|
||||
{eq name="$vo.enter_status" value="1"}<span class="blue">部分回款</span>{/eq}
|
||||
{eq name="$vo.enter_status" value="2"}<span class="green">全部回款</span>{/eq}
|
||||
</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
<td><span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/finance/invoice/view?id={$vo.id}">详情</span></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
{notempty name="$detail.income"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>回款记录</strong>『 已回款金额:<strong class="green">{$detail.has_income}</strong> 元,未回款金额:<strong class="red">{$detail.no_income}</strong> 元 』</</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th style="width:60px;">序号</th>
|
||||
<th style="width:150px;">到帐金额(元)</th>
|
||||
<th style="width:200px;">到账日期</th>
|
||||
<th style="width:100px;">到账操作人</th>
|
||||
<th style="width:150px;">操作时间</th>
|
||||
<th style="width:60px;">操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.income" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td><span class="green">{$vo.amount}</span></td>
|
||||
<td>{$vo.enter_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
<td><span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/finance/income/view?id={$vo.invoice_id}">详情</span></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
<tr>
|
||||
<td colspan="6"><strong>合同情况</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">录入人</td>
|
||||
<td>{$detail.admin_name} </td>
|
||||
<td class="layui-td-gray">录入时间</td>
|
||||
<td colspan="3">{$detail.create_time}</td>
|
||||
</tr>
|
||||
{gt name="$detail.archive_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">归档状态</td>
|
||||
<td>
|
||||
<span class="red">已归档</span>
|
||||
{if ($auth == 1) }
|
||||
<span class="layui-btn layui-btn-danger layui-btn-xs ml-4" data-event="archive" data-status="0">反确认归档</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray">归档人</td>
|
||||
<td>{$detail.archive_name} </td>
|
||||
<td class="layui-td-gray">归档时间</td>
|
||||
<td>{$detail.archive_time|date='Y-m-d H:i:s'}</td>
|
||||
{else/}
|
||||
<td class="layui-td-gray">归档状态</td>
|
||||
<td colspan="5">
|
||||
<span class="green">未归档</span>
|
||||
{if ($auth == 1) AND ($detail.check_status == 2) }
|
||||
<span class="layui-btn layui-btn-xs ml-4" data-event="archive" data-status="1">确认归档</span>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
{gt name="$detail.stop_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">中止人</td>
|
||||
<td>{$detail.stop_name}</td>
|
||||
<td class="layui-td-gray">中止时间</td>
|
||||
<td>{$detail.stop_time|date='Y-m-d H:i:s'}</td>
|
||||
<td colspan="2"><span class="layui-btn layui-btn-danger layui-btn-xs" data-event="stop" data-status="0">反中止合同</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">中止备注</td>
|
||||
<td colspan="5">{$detail.stop_remark|default='-'}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
{gt name="$detail.void_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">作废人</td>
|
||||
<td>{$detail.void_name}</td>
|
||||
<td class="layui-td-gray">作废时间</td>
|
||||
<td>{$detail.void_time|date='Y-m-d H:i:s'}</td>
|
||||
<td colspan="2"><span class="layui-btn layui-btn-danger layui-btn-xs" data-event="void" data-status="0">反作废合同</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">作废备注</td>
|
||||
<td colspan="5">{$detail.void_remark|default='-'}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div>盖章合同文件</div>
|
||||
<div><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">文件上传</button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="seal_ids" value="{$detail.seal_ids|default=''}">
|
||||
{volist name="$detail.seal_array" id="vo"}
|
||||
<div class="layui-col-md4" id="file_{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="layui-tab layui-tab-card" style="margin:0; background-color:#fff;" lay-filter="contract" id="contractTab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-load="true">审批信息</li>
|
||||
<li>操作记录</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding:0;">
|
||||
<div class="layui-tab-item layui-show" style="padding-top:12px; background-color:#fff;">
|
||||
{if ($detail.stop_time == 0) AND ($detail.void_time == 0) }
|
||||
<div id="checkBox" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}" class="px-3 pb-3"></div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/contract/view_log" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var contract_id = {$detail.id};
|
||||
var auth = {$auth};
|
||||
var archive = {$detail.archive_time};
|
||||
var moduleInit = ['tool','oaCheck','oaPicker','oaEdit','uploadPlus'];
|
||||
let checking_btn='<span class="layui-btn layui-btn-warm" data-event="stop" data-status="1">中止合同</span><span class="layui-btn layui-btn-danger" data-event="void" data-status="1">作废合同</span>';
|
||||
function gouguInit() {
|
||||
var tool = layui.tool,element = layui.element,oaCheck=layui.oaCheck,oaPicker=layui.oaPicker,uploadPlus=layui.uploadPlus;
|
||||
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
"uidDelete":true,//是否开启只有上传人自己才能删除自己的附件
|
||||
"ajaxSave":function(res){
|
||||
$.ajax({
|
||||
url: "/contract/api/contract_seal_ids",
|
||||
type:'post',
|
||||
data:{
|
||||
'id':contract_id,
|
||||
'seal_ids':res,
|
||||
},
|
||||
success: function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
"ajaxDelete":function(res){
|
||||
$.ajax({
|
||||
url: "/contract/api/contract_seal_ids",
|
||||
type:'post',
|
||||
data:{
|
||||
'id':contract_id,
|
||||
'seal_ids':res,
|
||||
},
|
||||
success: function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
element.on('tab(contract)', function(data){
|
||||
let index = data.index;
|
||||
if(index == 1){
|
||||
log();
|
||||
}
|
||||
});
|
||||
|
||||
oaCheck.init({
|
||||
check_name:'contract',
|
||||
checking_btn:checking_btn,
|
||||
check_reversed :function(){
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
let eventCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
parent.layui.pageTable.reload();
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
|
||||
//选择合同保管人弹窗
|
||||
$('body').on('click','#keeper',function () {
|
||||
let that = $(this);
|
||||
let ids=$(this).data('ids')+'',names = $(this).data('names')+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
tool.post("/contract/contract/add", {'id':contract_id,'keeper_uid':select_id.join(','),'scene':'change'}, eventCallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','#shares',function () {
|
||||
let that = $(this);
|
||||
let ids=$(this).data('ids')+'',names = $(this).data('names')+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:2,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
tool.post("/contract/contract/add", {'id':contract_id,'share_ids':select_id.join(','),'scene':'change'}, eventCallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//归档操作
|
||||
$('body').on('click','[data-event="archive"]',function(){
|
||||
let status = $(this).data('status');
|
||||
let tips = '合同归档后将不能进行任何数据操作,确定要提交归档?';
|
||||
if(status==0){
|
||||
tips = '确定要反归档操作?';
|
||||
}
|
||||
layer.confirm(tips, {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/contract_archive", {id: contract_id,archive_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
|
||||
//中止操作
|
||||
$('body').on('click','[data-event="stop"]',function(){
|
||||
let status = $(this).data('status');
|
||||
if(status==1){
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
title: '请输入中止的理由',
|
||||
area: ['480px', '120px']
|
||||
}, function(value, index, elem){
|
||||
tool.post("/contract/api/contract_stop", {id: contract_id,stop_status:status,stop_remark:value}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
else{
|
||||
layer.confirm('确定要反中止该合同?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/contract_stop", {id: contract_id,stop_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
//作废操作
|
||||
$('body').on('click','[data-event="void"]',function(){
|
||||
let status = $(this).data('status');
|
||||
if(status==1){
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
title: '请输入作废的理由',
|
||||
area: ['480px', '120px']
|
||||
}, function(value, index, elem){
|
||||
tool.post("/contract/api/contract_tovoid", {id: contract_id,void_status:status,void_remark:value}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
else{
|
||||
layer.confirm('确定要反作废该合同?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/contract_tovoid", {id: contract_id,void_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,9 @@
|
||||
<div>
|
||||
<div id="logList" class="log-timeline p-3"></div>
|
||||
</div>
|
||||
<script>
|
||||
function log(){
|
||||
let oaEdit = layui.oaEdit;
|
||||
oaEdit.log('logList','Contract',contract_id);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,36 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>产品信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">产品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">销售单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="sale-tr">
|
||||
<td colspan="7" style="padding:12px; text-align:center; color:#999">暂无产品信息</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="sale-tr">
|
||||
<td style="text-align:left;">{$vo.product_title|default=''}</td>
|
||||
<td>{$vo.product_unit|default=''}</td>
|
||||
<td>{$vo.product_specs|default=''}</td>
|
||||
<td>{$vo.product_price|default='0.00'}</td>
|
||||
<td>{$vo.product_num|default='1'}</td>
|
||||
<td>{$vo.product_subtotal|default='0.00'}</td>
|
||||
<td style="text-align:left;">{$vo.product_remark|default=''}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="sale-tr">
|
||||
<td colspan="6" style="padding:12px text-align:center; color:#999">暂无服务信息</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="sale-tr">
|
||||
<td style="text-align:left;">{$vo.service_title|default=''}</td>
|
||||
<td>{$vo.service_date|default=''}</td>
|
||||
<td>{$vo.service_price|default='0.00'}</td>
|
||||
<td>{$vo.service_num|default='1'}</td>
|
||||
<td>{$vo.service_subtotal|default='0.00'}</td>
|
||||
<td style="text-align:left;">{$vo.service_remark|default=''}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this"><a href="/contract/contract/voidlist">销售合同</a></li>
|
||||
<li><a href="/contract/purchase/voidlist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通合同</option>
|
||||
<option value="2">产品合同</option>
|
||||
<option value="3">服务合同</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:128px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>作废合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/contract/voidlist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/contract/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < 30) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'void_name',
|
||||
title: '作废人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'void_time',
|
||||
title: '作废日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/contract/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,136 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-1">新增产品</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" autocomplete="off" placeholder="请输入产品名称" lay-verify="required" lay-reqText="请输入产品名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">产品分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择分类">
|
||||
<option value="">请选择分类</option>
|
||||
{volist name=":set_recursion(get_base_data('ProductCate'))" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray" rowspan="4">缩略图</td>
|
||||
<td rowspan="4" style="width: 150px; vertical-align:top:">
|
||||
<div class="layui-upload">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">缩略图(尺寸:240x136)</button>
|
||||
<div class="layui-upload-list" id="demo1" style="width: 150px; height:80px; overflow: hidden;">
|
||||
<img src="" style="max-width: 100%; height:80px;" />
|
||||
<input type="hidden" name="thumb" value="">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品编码<font>*</font></td>
|
||||
<td><input type="text" name="code" autocomplete="off" value="{:get_codeno('PR')}" readonly class="layui-input" lay-verify="required" lay-reqText="请输入产品编码"></td>
|
||||
<td class="layui-td-gray">产品单位<font>*</font></td>
|
||||
<td><input type="text" name="unit" autocomplete="off" value="" class="layui-input" lay-verify="required" lay-reqText="请输入产品单位"></td>
|
||||
<td class="layui-td-gray">产品规格</td>
|
||||
<td><input type="text" name="specs" autocomplete="off" placeholder="请输入产品规格" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售价(元)<font>*</font></td>
|
||||
<td><input type="text" name="sale_price" autocomplete="off" placeholder="请输入产品销售价" lay-verify="required|number" lay-reqText="请输入产品销售价" class="layui-input"></td>
|
||||
<td class="layui-td-gray">成本价(元)</td>
|
||||
<td><input type="text" name="base_price" autocomplete="off" placeholder="请输入产品成本价" class="layui-input" lay-verify="number"></td>
|
||||
<td class="layui-td-gray">采购价(元)</td>
|
||||
<td><input type="text" name="purchase_price" autocomplete="off" placeholder="请输入产品采购价" class="layui-input" lay-verify="number"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">是否实物<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<input type="radio" name="is_object" value="1" title="是" checked>
|
||||
<input type="radio" name="is_object" value="2" title="否" >
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">产品附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" id="fileBoxInput" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">产品描述<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-1">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,upload = layui.upload,uploadPlus = layui.uploadPlus;
|
||||
|
||||
//封面上传
|
||||
var uploadInst = upload.render({
|
||||
elem: '#test1'
|
||||
, url: "/api/index/upload"
|
||||
, done: function (res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
//上传成功
|
||||
$('#demo1 input').attr('value', res.data.id);
|
||||
$('#demo1 img').attr('src', res.data.filepath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 500
|
||||
});
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
data.field.content = tinyMCE.editors['container'].getContent();
|
||||
if (data.field.content == '') {
|
||||
layer.msg('请先完善产品的描述内容');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/product/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,180 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tree-left{width:220px; float:left; height:100%; overflow: scroll; border:1px solid #eeeeee; background-color:#fff; padding:12px 12px 12px 5px;}
|
||||
.tree-left h3{font-size:16px; height:30px; padding-left:10px; font-weight:800}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page" style="height:calc(100% - 40px); box-sizing: border-box;">
|
||||
<div class="tree-left">
|
||||
<h3>产品分类</h3>
|
||||
<div id="cate"></div>
|
||||
</div>
|
||||
<div class="body-table" style="margin-left:248px; overflow:hidden;">
|
||||
<form class="layui-form gg-form-bar border-x border-t">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="status">
|
||||
<option value="">选择状态</option>
|
||||
<option value="1">正常</option>
|
||||
<option value="0">禁用</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px;">
|
||||
<input type="text" name="keywords" placeholder="关键字,产品名称/产品编码" class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="reset">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm addNew" type="button">+ 添加产品</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool,tree = layui.tree,form = layui.form;
|
||||
$.ajax({
|
||||
url: "/contract/api/get_productcate_tree",
|
||||
type:'get',
|
||||
success:function(res){
|
||||
//仅节点左侧图标控制收缩
|
||||
tree.render({
|
||||
elem: '#cate',
|
||||
data: res.trees,
|
||||
onlyIconControl: true, //是否仅允许节点左侧图标控制展开收缩
|
||||
click: function(obj){
|
||||
//layer.msg(JSON.stringify(obj.data));
|
||||
$('#cate').find('.layui-tree-main').removeClass('on');
|
||||
$(obj.elem).find('.layui-tree-main').eq(0).addClass('on');
|
||||
layui.pageTable.reload({
|
||||
where: {cate_id: obj.data.id},
|
||||
page:{curr:1}
|
||||
});
|
||||
$('[name="keywords"]').val('');
|
||||
$('[name="status"]').val('');
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
$('[lay-filter="reset"]').click(function(){
|
||||
$('#cate').find('.layui-tree-main').removeClass('on');
|
||||
});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'产品列表'
|
||||
,url: "/contract/product/datalist"
|
||||
,is_excel: true
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-114'
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'code',width:150, title: '产品编码', align:'center'}
|
||||
,{field:'cate',width:150, title: '产品分类', align:'center'}
|
||||
,{field:'title',title: '产品名称',minWidth:240}
|
||||
,{field:'sale_price',width:100, title: '销售价(元)', align:'center','style':'color:#16b777'}
|
||||
,{field:'purchase_price',width:100, title: '采购价(元)', align:'center','style':'color:#1e9fff'}
|
||||
,{field:'base_price',width:100, title: '成本价(元)', align:'center','style':'color:#a233c6'}
|
||||
,{field:'unit',width:60, title: '单位', align:'center'}
|
||||
,{field:'specs',width:60, title: '规格', align:'center'}
|
||||
,{field:'status', title: '状态',width:60,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:150,fixed:'right', title: '操作', align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+btn3+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
tool.side("/contract/product/add?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'view'){
|
||||
tool.side("/contract/product/view?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该产品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/product/set", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该产品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/product/set", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'del'){
|
||||
layer.confirm('确定要删除该产品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/product/del", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.addNew',function(){
|
||||
tool.side("/contract/product/add");
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data){
|
||||
layui.pageTable.reload({where:data.field,page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,142 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">编辑产品</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="{$detail.title}" autocomplete="off" placeholder="请输入产品名称" lay-verify="required" lay-reqText="请输入产品名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">产品分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择分类">
|
||||
<option value="">请选择分类</option>
|
||||
{volist name=":set_recursion(get_base_data('ProductCate'))" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.cate_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray" rowspan="4">缩略图</td>
|
||||
<td rowspan="4" style="width: 150px; vertical-align:top:">
|
||||
<div class="layui-upload">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">缩略图(尺寸:240x136)</button>
|
||||
<div class="layui-upload-list" id="demo1" style="width: 120px; height:66px; overflow: hidden;">
|
||||
<img src="{:get_file($detail.thumb)}" style="max-width: 100%; height:66px;" />
|
||||
<input type="hidden" name="thumb" value="{$detail.thumb}">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品编码<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$detail.code}" readonly class="layui-input" lay-verify="required"></td>
|
||||
<td class="layui-td-gray">产品单位<font>*</font></td>
|
||||
<td><input type="text" name="unit" autocomplete="off" value="{$detail.unit}" class="layui-input" lay-verify="required" lay-reqText="请输入产品单位"></td>
|
||||
<td class="layui-td-gray">产品规格</td>
|
||||
<td><input type="text" name="specs" autocomplete="off" value="{$detail.specs}" placeholder="请输入产品规格" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售价(元)<font>*</font></td>
|
||||
<td><input type="text" name="sale_price" value="{$detail.sale_price}" autocomplete="off" placeholder="请输入产品销售价" lay-verify="required|number" lay-reqText="请输入产品销售价" class="layui-input"></td>
|
||||
<td class="layui-td-gray">成本价(元)</td>
|
||||
<td><input type="text" name="base_price" value="{$detail.base_price}" lay-verify="number" autocomplete="off" placeholder="请输入产品成本价" class="layui-input"></td>
|
||||
<td class="layui-td-gray">采购价(元)</td>
|
||||
<td><input type="text" name="purchase_price" value="{$detail.purchase_price}" lay-verify="number" autocomplete="off" placeholder="请输入产品采购价" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">是否实物<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<input type="radio" name="is_object" value="1" title="是" {eq name="$detail.is_object" value="1"} checked {/eq}>
|
||||
<input type="radio" name="is_object" value="2" title="否" {eq name="$detail.is_object" value="2"} checked {/eq}>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">产品附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">产品描述<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0">{$detail.content}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-1">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,upload = layui.upload,uploadPlus = layui.uploadPlus;
|
||||
|
||||
//封面上传
|
||||
var uploadInst = upload.render({
|
||||
elem: '#test1'
|
||||
, url: "/api/index/upload"
|
||||
, done: function (res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
//上传成功
|
||||
$('#demo1 input').attr('value', res.data.id);
|
||||
$('#demo1 img').attr('src', res.data.filepath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 500
|
||||
});
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
data.field.content = tinyMCE.editors['container'].getContent();
|
||||
if (data.field.content == '') {
|
||||
layer.msg('请先完善产品的描述内容');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/product/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,77 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-4">
|
||||
<h3 class="pb-1">产品详情</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品名称</td>
|
||||
<td colspan="3">{$detail.title}</td>
|
||||
<td class="layui-td-gray">产品分类</td>
|
||||
<td>{$detail.cate}</td>
|
||||
<td class="layui-td-gray" rowspan="4">缩略图</td>
|
||||
<td rowspan="4" style="width:150px;">
|
||||
<div class="layui-upload-list" id="demo1" style="width: 150px; height:80px; overflow: hidden;">
|
||||
<img src="{:get_file($detail.thumb)}" style="max-width: 100%; height:66px;" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">产品编码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">产品单位</td>
|
||||
<td>{$detail.unit}</td>
|
||||
<td class="layui-td-gray">产品规格</td>
|
||||
<td>{$detail.specs}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售价(元)</td>
|
||||
<td>{$detail.sale_price}</td>
|
||||
<td class="layui-td-gray">成本价(元)</td>
|
||||
<td>{$detail.base_price}</td>
|
||||
<td class="layui-td-gray">采购价(元)</td>
|
||||
<td>{$detail.purchase_price}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">是否实物</td>
|
||||
<td colspan="7">
|
||||
{eq name="$detail.is_object" value="1"}是{/eq}
|
||||
{eq name="$detail.is_object" value="2"}否{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="8" style="text-align:left; color:#666"><strong>产品描述</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
{$detail.content|raw}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,91 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-1">产品分类</h3>
|
||||
{eq name="$id" value="0"}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">父级分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
|
||||
<option value="0">作为顶级分类</option>
|
||||
{volist name="$cates" id="v"}
|
||||
<option value="{$v.id}" {eq name="$pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">分类名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">描述</td>
|
||||
<td colspan="5"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
{else/}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">父级分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
|
||||
<option value="0">作为顶级分类</option>
|
||||
{volist name="$cates" id="v"}
|
||||
<option value="{$v.id}" {eq name="$detail.pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">分类名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" value="{$detail.title}" lay-verify="required" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" value="{$detail.sort}" placeholder="请输入排序,数字" value="0" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">描述</td>
|
||||
<td colspan="5"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea">{$detail.desc}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
{/eq}
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="id" value="{$id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function () {
|
||||
parent.location.reload();
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/productcate/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,86 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<div class="gg-form-bar border-t border-x" style="padding-bottom:10px;">
|
||||
<button class="layui-btn layui-btn-sm add-menu">+ 添加产品分类</button>
|
||||
</div>
|
||||
<div>
|
||||
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="switchStatus">
|
||||
<input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="status" {{ d.status == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var treeTable = layui.treeTable, tool = layui.tool;
|
||||
|
||||
layui.pageTable = treeTable.render({
|
||||
elem: '#treeTable'
|
||||
,url: "/contract/productcate/datalist"
|
||||
,tree: { // treeTable 特定属性集
|
||||
customName: {name:'title'},
|
||||
data: {},
|
||||
view: {
|
||||
showIcon:false,
|
||||
expandAllDefault:true
|
||||
},
|
||||
async: {},
|
||||
callback: {}
|
||||
}
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field: 'sort', title: '排序',align:'center', width:80}
|
||||
,{field:'title', width:240, title: '分类名称'}
|
||||
,{field:'pid', title: '父级ID', width:80, align:'center'}
|
||||
,{field:'desc', title: '描述', }
|
||||
,{width:160,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子分类</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]]
|
||||
,page:false
|
||||
//,skin:'line'
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
$('.add-menu').on('click', function(){
|
||||
tool.side('/contract/productcate/add');
|
||||
return;
|
||||
});
|
||||
|
||||
//操作按钮
|
||||
treeTable.on('tool(treeTable)', function (obj) {
|
||||
if (obj.event === 'add') {
|
||||
tool.side('/contract/productcate/add?pid='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side('/contract/productcate/add?id='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete('/contract/productcate/del', { id: obj.data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,227 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增采购合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" value="" lay-verify="required" lay-reqText="请输入合同名称" autocomplete="off" placeholder="请输入合同名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>
|
||||
<input type="hidden" name="types" value="{$types}">
|
||||
{eq name="$types" value="1" }普通采购{/eq}
|
||||
{eq name="$types" value="2" }物品采购{/eq}
|
||||
{eq name="$types" value="3" }服务采购{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">签约主体<span style="font-size:12px;">(甲方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择签约主体公司">
|
||||
<option value="">请选择签约主体公司</option>
|
||||
{volist name=":get_base_data('Enterprise')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同始止日期<font>*</font></td>
|
||||
<td id="barDate" style="width:320px;">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="start_time" value="" placeholder="选择时间区间" readonly name="start_time" lay-verify="required" lay-reqText="请选择合同开始时间">
|
||||
</div>
|
||||
~
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="end_time" value="" placeholder="选择时间区间" readonly name="end_time" lay-verify="required" lay-reqText="请选择合同结束时间">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">供应商名称<span style="font-size:12px;">(乙方)</span><font>*</font></td>
|
||||
<td colspan="3">
|
||||
{eq name="$is_supplier" value="1"}
|
||||
<input type="text" name="supplier" autocomplete="off" value="" readonly lay-verify="required" lay-reqText="请输入供应商名称" placeholder="请输入供应商名称" class="layui-input supplier-picker">
|
||||
{else/}
|
||||
<input type="text" name="supplier" autocomplete="off" value="" lay-verify="required" lay-reqText="请输入供应商名称" placeholder="请输入供应商名称" class="layui-input">
|
||||
{/eq}
|
||||
<input type="hidden" name="supplier_id" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray">签约供应商代表<font>*</font></td>
|
||||
<td><input type="text" name="contact_name" value="" autocomplete="off" lay-verify="required" lay-reqText="请输入供应商代表姓名" placeholder="请输入供应商代表姓名" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">供应商联系地址</td>
|
||||
<td colspan="3"><input type="text" name="contact_address" value="" autocomplete="off" placeholder="请输入供应商联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray-3">供应商联系电话</td>
|
||||
<td><input type="text" name="contact_mobile" value="" autocomplete="off" placeholder="请输入供应商联系电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额<font>*</font></td>
|
||||
<td>
|
||||
{eq name="$types" value="1"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请输入合同金额,数字" placeholder="请输入合同金额,数字" autocomplete="off" class="layui-input">
|
||||
{/eq}
|
||||
{eq name="$types" value="2"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请完善物品信息" placeholder="完善物品信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
{eq name="$types" value="3"}
|
||||
<input type="text" name="cost" value="" lay-verify="required|number" lay-reqText="请完善服务信息" placeholder="完善服务信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">合同类别<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择合同类别">
|
||||
<option value="">请选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">合同编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$codeno}" autocomplete="off" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" lay-reqText="请输入合同编号" placeholder="请输入合同编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_name" value="" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同签订人" placeholder="请选择合同签订人" class="layui-input picker-diy">
|
||||
<input type="hidden" name="sign_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同所属部门<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_department" value="" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同所属部门" placeholder="请选择合同所属部门" class="layui-input picker-oa" data-types="department">
|
||||
<input type="hidden" name="did" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同签订日期<font>*</font></td>
|
||||
<td><input type="text" name="sign_time" value="" readonly lay-verify="required" lay-reqText="请选择合同签订日期" placeholder="请选择合同签订日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>
|
||||
<input type="text" name="prepared_name" value="" readonly placeholder="请选择合同制定人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="prepared_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>
|
||||
<input type="text" name="keeper_name" value="" readonly placeholder="请选择合同保管人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="keeper_uid" value="0">
|
||||
</td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="share_names" value="" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids" value="">
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$types" value="2"}{include file="/purchase/add_purchased"}{/eq}
|
||||
{eq name="$types" value="3"}{include file="/purchase/add_service"}{/eq}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<button type="button" class="layui-btn layui-btn-sm" id="uploadBtn"><i class="layui-icon"></i>附件上传</button>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" id="fileBoxInput" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="scene" value="add">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate, oaPicker = layui.oaPicker,uploadPlus = layui.uploadPlus;
|
||||
if(typeof purchased_fun==='function'){
|
||||
purchased_fun(layui);
|
||||
}
|
||||
if(typeof service_fun==='function'){
|
||||
service_fun(layui);
|
||||
}
|
||||
//日期范围
|
||||
laydate.render({
|
||||
elem: '#barDate',
|
||||
range: ['#start_time', '#end_time']
|
||||
});
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//选择员工弹窗
|
||||
$('body').on('click','.picker-diy',function () {
|
||||
let that = $(this);
|
||||
let ids=that.next().val()+'',names = that.val()+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
//这里是选择后的回调方法,可以根据具体需求自定义写哦
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
that.val(select_name.join(','));
|
||||
that.next().val(select_id.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择供应商弹窗
|
||||
$('body').on('click','.supplier-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],contact_name=[],contact_mobile=[],address=[],map = {},types = 'supplier',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
contact_name.push(data[i].contact_name);
|
||||
contact_mobile.push(data[i].contact_mobile);
|
||||
address.push(data[i].address);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
$('[name="contact_name"]').val(contact_name.join(','));
|
||||
$('[name="contact_mobile"]').val(contact_mobile.join(','));
|
||||
$('[name="contact_address"]').val(address.join(','));
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/purchase/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,116 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>物品信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="purchasedAdd">+ 添加物品</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="purchasedTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">物品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">采购单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
<tr class="purchased-tr">
|
||||
{eq name="is_purchased" value="1"}
|
||||
<td><input type="text" name="purchased_title[]" value="" class="layui-input purchased-picker" readonly lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="purchased_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="purchased_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="purchased_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品规格"></td>
|
||||
<td><input type="text" name="purchased_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入采购单价"></td>
|
||||
<td><input type="text" name="purchased_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入物品数量"></td>
|
||||
<td><input type="text" name="purchased_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="purchased_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_purchased={$is_purchased};
|
||||
function purchased_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.purchased-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],purchase_price=[],unit=[],specs=[],map = {},types = 'purchased',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
unit.push(data[i].unit);
|
||||
specs.push(data[i].specs);
|
||||
purchase_price.push(data[i].purchase_price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(2).val(unit.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(3).val(specs.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(4).val(purchase_price.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(6).val(purchase_price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加物品信息表格
|
||||
$('#purchasedAdd').on('click',function(){
|
||||
var html = '',purchased_title=' class="layui-input"';
|
||||
if(is_purchased==1){
|
||||
purchased_title=' class="layui-input purchased-picker" readonly';
|
||||
}
|
||||
html += '<tr class="purchased-tr">\
|
||||
<td><input type="text" name="purchased_title[]" value="" '+purchased_title+' lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>\
|
||||
<td><input type="text" name="purchased_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>\
|
||||
<td><input type="text" name="purchased_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品规格"></td>\
|
||||
<td><input type="text" name="purchased_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入采购单价"></td>\
|
||||
<td><input type="text" name="purchased_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入物品数量"></td>\
|
||||
<td><input type="text" name="purchased_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="purchased_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#purchasedTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#purchasedTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.purchased-tr').length<2){
|
||||
layer.msg('至少保留一个物品选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.purchased-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#purchasedTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.purchased-tr').find("input");
|
||||
var purchased_price = inputs.eq(4).val();
|
||||
var purchased_num = inputs.eq(5).val();
|
||||
var purchased_amount = (purchased_price*purchased_num).toFixed(2);
|
||||
if(isNaN(purchased_amount)){
|
||||
purchased_amount = 0.00;
|
||||
}
|
||||
inputs.eq(6).val(purchased_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var purchased_subtotal = $('#purchasedTable').find('[name="purchased_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < purchased_subtotal.length; m++) {
|
||||
total+=$(purchased_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,82 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="serviceAdd">+ 添加服务</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="serviceTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
<tr class="service-tr">
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入服务名称"></td>
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
function service_fun(layui){
|
||||
let form = layui.form;
|
||||
//添加服务信息表格
|
||||
$('#serviceAdd').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="service-tr">\
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入服务名称"></td>\
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>\
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>\
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>\
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#serviceTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#serviceTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.service-tr').length<2){
|
||||
layer.msg('至少保留一个服务选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.service-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#serviceTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.service-tr').find("input");
|
||||
var service_price = inputs.eq(2).val();
|
||||
var service_num = inputs.eq(3).val();
|
||||
var service_amount = (service_price*service_num).toFixed(2);
|
||||
if(isNaN(service_amount)){
|
||||
service_amount = 0.00;
|
||||
}
|
||||
inputs.eq(4).val(service_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var service_subtotal = $('#serviceTable').find('[name="service_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < service_subtotal.length; m++) {
|
||||
total+=$(service_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,34 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td>选择合同性质</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="layui-btn-group">
|
||||
<a href="/contract/purchase/add?types=1" class="layui-btn">普通采购</a>
|
||||
<a href="/contract/purchase/add?types=2" class="layui-btn">物品采购</a>
|
||||
<a href="/contract/purchase/add?types=3" class="layui-btn">服务采购</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
{block name="copyright"}{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,178 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/contract/contract/archivelist">销售合同</a></li>
|
||||
<li class="layui-this"><a href="/contract/purchase/archivelist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通采购</option>
|
||||
<option value="2">物品采购</option>
|
||||
<option value="3">服务采购</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>归档合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const delay_num = {$delay_num|default=30};
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/purchase/archivelist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/purchase/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < delay_num) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'archive_name',
|
||||
title: '归档人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'archive_time',
|
||||
title: '归档日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/purchase/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,256 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部</li>
|
||||
<li>待我审批</li>
|
||||
<li>我已审批</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x" id="barsearchform" lay-filter="barsearchform">
|
||||
{gt name="$is_auth" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:90px;">
|
||||
<input type="text" name="username" placeholder="选择签定人" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{else/}
|
||||
{gt name="$is_leader" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:90px;">
|
||||
<input type="text" name="username" placeholder="选择签定人" class="layui-input picker-sub" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{/gt}
|
||||
{/gt}
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通采购</option>
|
||||
<option value="2">物品采购</option>
|
||||
<option value="3">服务采购</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="check_status">
|
||||
<option value="">选择审批状态</option>
|
||||
{volist name=":get_check_status()" id="vo"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<input type="hidden" name="order_field" value=''>
|
||||
<input type="hidden" name="order_type" value=''>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="add">
|
||||
<span>+ 添加合同</span>
|
||||
<i class="layui-icon layui-icon-down layui-font-12"></i>
|
||||
</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const delay_num = {$delay_num|default=30};
|
||||
const contract_types = [{"id":1,"title":"普通采购"},{"id":2,"title":"物品采购"},{"id":3,"title":"服务采购"}];
|
||||
const moduleInit = ['tool','tablePlus','oaPicker','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,form = layui.form,dropdown = layui.dropdown,element = layui.element, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
let searchObject = form.val('barsearchform');
|
||||
layui.pageTable.reload({where:searchObject,page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
,title: "采购合同列表"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/contract/purchase/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,autoSort: false
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 80
|
||||
},{ field: 'check_status', title: '审批状态', align: 'center', width: 110, templet: function (d) {
|
||||
var html = '<span class="check-status-color-' + d.check_status + '">『' + d.status_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/purchase/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'end_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < delay_num) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 100
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 120,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
|
||||
if(d.check_status==0 || d.check_status==4){
|
||||
return html+btn0+btn1+btn2+'</div>';
|
||||
}
|
||||
else{
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(table_contract)', function(obj){
|
||||
var that = this;
|
||||
if (obj.event === 'add'){
|
||||
dropdown.render({
|
||||
elem: that,
|
||||
show: true, // 外部事件触发即显示
|
||||
data: contract_types,
|
||||
click: function(obj){
|
||||
tool.side("/contract/purchase/add?types="+obj.id);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/purchase/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/contract/purchase/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该合同吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/purchase/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,228 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑采购合同</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" value="{$detail.name}" lay-verify="required" lay-reqText="请输入合同名称" autocomplete="off" placeholder="请输入合同名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>{$detail.types_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">签约主体(甲方)<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<select name="subject_id" lay-verify="required" lay-reqText="请选择签约主体公司">
|
||||
<option value="">请选择签约主体公司</option>
|
||||
{volist name=":get_base_data('Enterprise')" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.subject_id" } selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同始止日期<font>*</font></td>
|
||||
<td id="barDate" style="width:320px;">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="start_time" value="{$detail.start_time}" placeholder="选择时间区间" readonly name="start_time" lay-verify="required" lay-reqText="请选择合同开始时间">
|
||||
</div>
|
||||
~
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="end_time" value="{$detail.end_time}" placeholder="选择时间区间" readonly name="end_time" lay-verify="required" lay-reqText="请选择合同结束时间">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">供应商名称(乙方)<font>*</font></td>
|
||||
<td colspan="3">
|
||||
{eq name="$is_supplier" value="1"}
|
||||
<input type="text" name="supplier" autocomplete="off" value="{$detail.supplier}" readonly lay-verify="required" lay-reqText="请输入供应商名称" placeholder="请输入供应商名称" class="layui-input supplier-picker">
|
||||
{else/}
|
||||
<input type="text" name="supplier" autocomplete="off" value="{$detail.supplier}" lay-verify="required" lay-reqText="请输入供应商名称" placeholder="请输入供应商名称" class="layui-input">
|
||||
{/eq}
|
||||
<input type="hidden" name="supplier_id" value="{$detail.supplier_id}">
|
||||
</td>
|
||||
<td class="layui-td-gray-3">签约供应商代表<font>*</font></td>
|
||||
<td><input type="text" name="contact_name" value="{$detail.contact_name}" autocomplete="off" lay-verify="required" lay-reqText="请输入供应商代表姓名" placeholder="请输入供应商代表姓名" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">供应商联系地址</td>
|
||||
<td colspan="3"><input type="text" name="contact_address" value="{$detail.contact_address}" autocomplete="off" placeholder="请输入供应商联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray-3">供应商联系电话</td>
|
||||
<td><input type="text" name="contact_mobile" value="{$detail.contact_mobile}" autocomplete="off" placeholder="请输入供应商联系电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额<font>*</font></td>
|
||||
<td>
|
||||
{eq name="$detail.types" value="1"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请输入合同金额,数字" placeholder="请输入合同金额,数字" autocomplete="off" class="layui-input">
|
||||
{/eq}
|
||||
{eq name="$detail.types" value="2"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请完善产品信息" placeholder="完善产品信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
{eq name="$detail.types" value="3"}
|
||||
<input type="text" name="cost" value="{$detail.cost}" lay-verify="required|number" lay-reqText="请完善服务信息" placeholder="完善服务信息,合同金额自动计算" readonly class="layui-input layui-input-readonly">
|
||||
{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">合同类别<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择合同类别">
|
||||
<option value="">请选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.cate_id"} selected{/eq}>{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">合同编号<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$detail.code}" autocomplete="off" {eq name="$is_codeno" value="1"}readonly{/eq} lay-verify="required" lay-reqText="请输入合同编号" placeholder="请输入合同编号" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_name" value="{$detail.sign_name}" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同签订人" placeholder="请选择合同签订人" class="layui-input picker-diy">
|
||||
<input type="hidden" name="sign_uid" value="{$detail.sign_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同所属部门<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="sign_department" value="{$detail.sign_department}" autocomplete="off" readonly lay-verify="required" lay-reqText="请选择合同所属部门" placeholder="请选择合同所属部门" class="layui-input picker-oa" data-types="department">
|
||||
<input type="hidden" name="did" value="{$detail.did}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同签订日期<font>*</font></td>
|
||||
<td><input type="text" name="sign_time" value="{$detail.sign_time}" readonly lay-verify="required" lay-reqText="请选择合同签订日期" placeholder="请选择合同签订日期" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>
|
||||
<input type="text" name="prepared_name" value="{$detail.prepared_name}" autocomplete="off" readonly placeholder="请选择合同制定人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="prepared_uid" value="{$detail.prepared_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>
|
||||
<input type="text" name="keeper_name" value="{$detail.keeper_name}" autocomplete="off" readonly placeholder="请选择合同保管人" class="layui-input picker-admin">
|
||||
<input type="hidden" name="keeper_uid" value="{$detail.keeper_uid}">
|
||||
</td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="share_names" value="{$detail.share_names}" autocomplete="off" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids" value="{$detail.share_ids}">
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$detail.types" value="2"}{include file="/purchase/edit_purchased"}{/eq}
|
||||
{eq name="$detail.types" value="3"}{include file="/purchase/edit_service"}{/eq}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<button type="button" class="layui-btn layui-btn-sm" id="uploadBtn"><i class="layui-icon"></i>附件上传</button>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<input type="hidden" name="types" value="{$detail.types}">
|
||||
<input type="hidden" name="scene" value="edit">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate, oaPicker = layui.oaPicker,uploadPlus = layui.uploadPlus;
|
||||
if(typeof purchased_fun==='function'){
|
||||
purchased_fun(layui);
|
||||
}
|
||||
if(typeof service_fun==='function'){
|
||||
service_fun(layui);
|
||||
}
|
||||
//日期范围
|
||||
laydate.render({
|
||||
elem: '#barDate',
|
||||
range: ['#start_time', '#end_time']
|
||||
});
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
//选择员工弹窗
|
||||
$('body').on('click','.picker-diy',function () {
|
||||
let that = $(this);
|
||||
let ids=that.next().val()+'',names = that.val()+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
//这里是选择后的回调方法,可以根据具体需求自定义写哦
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
that.val(select_name.join(','));
|
||||
that.next().val(select_id.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择供应商弹窗
|
||||
$('body').on('click','.supplier-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],contact_name=[],contact_mobile=[],address=[],map = {},types = 'supplier',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
contact_name.push(data[i].contact_name);
|
||||
contact_mobile.push(data[i].contact_mobile);
|
||||
address.push(data[i].address);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
$('[name="contact_name"]').val(contact_name.join(','));
|
||||
$('[name="contact_mobile"]').val(contact_mobile.join(','));
|
||||
$('[name="contact_address"]').val(address.join(','));
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/purchase/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,135 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>物品信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="purchasedAdd">+ 添加物品</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="purchasedTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">物品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">采购单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="purchased-tr">
|
||||
{eq name="is_purchased" value="1"}
|
||||
<td><input type="text" name="purchased_title[]" value="" class="layui-input purchased-picker" readonly lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="purchased_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="purchased_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="purchased_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品规格"></td>
|
||||
<td><input type="text" name="purchased_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入采购单价"></td>
|
||||
<td><input type="text" name="purchased_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入物品数量"></td>
|
||||
<td><input type="text" name="purchased_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="purchased_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="purchased-tr">
|
||||
{eq name="is_purchased" value="1"}
|
||||
<td><input type="text" name="purchased_title[]" value="{$vo.purchased_title|default=''}" class="layui-input purchased-picker" readonly lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="{$vo.purchased_id|default=0}"></td>
|
||||
{else/}
|
||||
<td><input type="text" name="purchased_title[]" value="{$vo.purchased_title|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="{$vo.purchased_id|default=0}"></td>
|
||||
{/eq}
|
||||
<td><input type="text" name="purchased_unit[]" value="{$vo.purchased_unit|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>
|
||||
<td><input type="text" name="purchased_specs[]" value="{$vo.purchased_specs|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入物品规格"></td>
|
||||
<td><input type="text" name="purchased_price[]" value="{$vo.purchased_price|default='0.00'}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入采购单价"></td>
|
||||
<td><input type="text" name="purchased_num[]" value="{$vo.purchased_num|default=0}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入物品数量"></td>
|
||||
<td><input type="text" name="purchased_subtotal[]" value="{$vo.purchased_subtotal|default='0.00'}" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="purchased_remark[]" value="{$vo.purchased_remark|default=''}" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
const is_purchased={$is_purchased};
|
||||
function purchased_fun(layui){
|
||||
let form = layui.form,oaPicker = layui.oaPicker;
|
||||
|
||||
//选择物品弹窗
|
||||
$('body').on('click','.purchased-picker',function () {
|
||||
let that = $(this),ids = [],titles=[],purchase_price=[],unit=[],specs=[],map = {},types = 'purchased',type = 1;
|
||||
let callback = function(data){
|
||||
for ( var i = 0; i <data.length; i++){
|
||||
ids.push(data[i].id);
|
||||
titles.push(data[i].title);
|
||||
unit.push(data[i].unit);
|
||||
specs.push(data[i].specs);
|
||||
purchase_price.push(data[i].purchase_price);
|
||||
}
|
||||
that.val(titles.join(','));
|
||||
that.next().val(ids.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(2).val(unit.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(3).val(specs.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(4).val(purchase_price.join(','));
|
||||
that.parents('.purchased-tr').find('input').eq(6).val(purchase_price.join(','));
|
||||
count_cost();
|
||||
}
|
||||
oaPicker.picker(types,type,callback,map);
|
||||
});
|
||||
|
||||
//添加物品信息表格
|
||||
$('#purchasedAdd').on('click',function(){
|
||||
var html = '',purchased_title=' class="layui-input"';
|
||||
if(is_purchased==1){
|
||||
purchased_title=' class="layui-input purchased-picker" readonly';
|
||||
}
|
||||
html += '<tr class="purchased-tr">\
|
||||
<td><input type="text" name="purchased_title[]" value="" '+purchased_title+' lay-verify="required" lay-reqText="请输入物品名称"><input type="hidden" name="purchased_id[]" value="0"></td>\
|
||||
<td><input type="text" name="purchased_unit[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入单位"></td>\
|
||||
<td><input type="text" name="purchased_specs[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入物品规格"></td>\
|
||||
<td><input type="text" name="purchased_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入采购单价"></td>\
|
||||
<td><input type="text" name="purchased_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入物品数量"></td>\
|
||||
<td><input type="text" name="purchased_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="purchased_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#purchasedTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#purchasedTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.purchased-tr').length<2){
|
||||
layer.msg('至少保留一个物品选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.purchased-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#purchasedTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.purchased-tr').find("input");
|
||||
var purchased_price = inputs.eq(4).val();
|
||||
var purchased_num = inputs.eq(5).val();
|
||||
var purchased_amount = (purchased_price*purchased_num).toFixed(2);
|
||||
if(isNaN(purchased_amount)){
|
||||
purchased_amount = 0.00;
|
||||
}
|
||||
inputs.eq(6).val(purchased_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var purchased_subtotal = $('#purchasedTable').find('[name="purchased_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < purchased_subtotal.length; m++) {
|
||||
total+=$(purchased_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,96 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong> <span class="layui-btn layui-btn-sm" type="button" id="serviceAdd">+ 添加服务</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table id="serviceTable" class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
<th width="60">操作</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="service-tr">
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入服务名称"></td>
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="service-tr">
|
||||
<td><input type="text" name="service_title[]" value="{$vo.service_title|default=''}" class="layui-input" lay-verify="required" lay-reqText="请输入服务名称"></td>
|
||||
<td><input type="text" name="service_date[]" value="{$vo.service_date|default=''}" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>
|
||||
<td><input type="text" name="service_price[]" value="{$vo.service_price|default='0.00'}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>
|
||||
<td><input type="text" name="service_num[]" value="{$vo.service_num|default=0}" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>
|
||||
<td><input type="text" name="service_subtotal[]" value="{$vo.service_subtotal|default='0.00'}" class="layui-input layui-input-readonly" readonly></td>
|
||||
<td><input type="text" name="service_remark[]" value="{$vo.service_remark|default=''}" class="layui-input"></td>
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<script>
|
||||
function service_fun(layui){
|
||||
let form = layui.form;
|
||||
//添加服务信息表格
|
||||
$('#serviceAdd').on('click',function(){
|
||||
var html = '';
|
||||
html += '<tr class="service-tr">\
|
||||
<td><input type="text" name="service_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请输入服务名称"></td>\
|
||||
<td><input type="text" name="service_date[]" value="" class="layui-input layui-input-readonly tool-time" data-range="到" lay-verify="required" lay-reqText="请选择服务周期" readonly></td>\
|
||||
<td><input type="text" name="service_price[]" value="0.00" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务单价"></td>\
|
||||
<td><input type="text" name="service_num[]" value="1" class="layui-input input-num" lay-verify="required|number" lay-reqText="请输入服务次数"></td>\
|
||||
<td><input type="text" name="service_subtotal[]" value="0.00" class="layui-input layui-input-readonly" readonly></td>\
|
||||
<td><input type="text" name="service_remark[]" value="" class="layui-input"></td>\
|
||||
<td><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></td>\
|
||||
</tr>';
|
||||
$('#serviceTable').append(html).find('.tr-none').remove();
|
||||
form.render();
|
||||
});
|
||||
|
||||
$('#serviceTable').on('click', '[lay-event="del"]', function() {
|
||||
if($('.service-tr').length<2){
|
||||
layer.msg('至少保留一个服务选项');
|
||||
return false;
|
||||
}
|
||||
$(this).parents('.service-tr').remove();
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算价格
|
||||
$('#serviceTable').on('input', '.input-num', function() {
|
||||
var inputs = $(this).parents('.service-tr').find("input");
|
||||
var service_price = inputs.eq(2).val();
|
||||
var service_num = inputs.eq(3).val();
|
||||
var service_amount = (service_price*service_num).toFixed(2);
|
||||
if(isNaN(service_amount)){
|
||||
service_amount = 0.00;
|
||||
}
|
||||
inputs.eq(4).val(service_amount);
|
||||
count_cost();
|
||||
});
|
||||
|
||||
//计算总价
|
||||
function count_cost(){
|
||||
var service_subtotal = $('#serviceTable').find('[name="service_subtotal[]"]');
|
||||
var total = 0;
|
||||
for (var m = 0; m < service_subtotal.length; m++) {
|
||||
total+=$(service_subtotal[m]).val()*1000;
|
||||
}
|
||||
if(isNaN(total)){
|
||||
total = 0;
|
||||
}
|
||||
$('[name="cost"]').val((total/1000).toFixed(2));
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,177 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/contract/contract/stoplist">销售合同</a></li>
|
||||
<li class="layui-this"><a href="/contract/purchase/stoplist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通采购</option>
|
||||
<option value="2">物品采购</option>
|
||||
<option value="3">服务采购</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>中止合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/purchase/stoplist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/purchase/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < 30) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'stop_name',
|
||||
title: '中止人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'stop_time',
|
||||
title: '中止日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/purchase/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,441 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-tab-title .layui-this{background-color:#fff;}
|
||||
.layui-tab-card,.layui-card{box-shadow:0 0 0 0 rgb(0 0 0 / 10%); border-radius:0; border-top:none;}
|
||||
#checkBox .pb-2{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-2">采购合同详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同名称</td>
|
||||
<td colspan="3">{$detail.name}</td>
|
||||
<td class="layui-td-gray">合同编号</td>
|
||||
<td>{$detail.code}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">签约主体(甲方)</td>
|
||||
<td colspan="3">{$detail.subject_title}</td>
|
||||
<td class="layui-td-gray-2">合同始止日期</td>
|
||||
<td>{$detail.start_time} 至 {$detail.end_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">供应商名称(乙方)</td>
|
||||
<td colspan="3">{$detail.supplier}</td>
|
||||
<td class="layui-td-gray-3">签约供应商代表</td>
|
||||
<td>{$detail.contact_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-3">供应商联系地址</td>
|
||||
<td colspan="3">{$detail.contact_address|default='-'}</td>
|
||||
<td class="layui-td-gray">供应商联系电话</td>
|
||||
<td>{$detail.contact_mobile|default='-'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">合同金额</td>
|
||||
<td>{$detail.cost}</td>
|
||||
<td class="layui-td-gray">合同性质</td>
|
||||
<td>{$detail.types_name}</td>
|
||||
<td class="layui-td-gray">合同类别</td>
|
||||
<td>{$detail.cate_title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>签订信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同签订人</td>
|
||||
<td>{$detail.sign_name}</td>
|
||||
<td class="layui-td-gray-2">合同所属部门</td>
|
||||
<td>{$detail.sign_department}</td>
|
||||
<td class="layui-td-gray-2">合同签订日期</td>
|
||||
<td>{$detail.sign_time}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">合同制定人</td>
|
||||
<td>{$detail.prepared_name|default='-'}</td>
|
||||
<td class="layui-td-gray-2">合同保管人</td>
|
||||
<td>{$detail.keeper_name|default='-'} <span id="keeper" data-ids="{$detail.keeper_uid}" data-names="{$detail.keeper_name}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span></td>
|
||||
<td class="layui-td-gray">合同共享人员</td>
|
||||
<td colspan="3">{$detail.share_names|default='-'} <span id="shares" data-ids="{$detail.share_ids}" data-names="{$detail.share_names}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span></td>
|
||||
</tr>
|
||||
{eq name="$detail.types" value="2"}{include file="/purchase/view_purchased"}{/eq}
|
||||
{eq name="$detail.types" value="3"}{include file="/purchase/view_service"}{/eq}
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>相关附件</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
{notempty name="$detail.ticket"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>申请收票记录</strong>『 已申请收票金额:<strong class="green">{$detail.has_ticket}</strong> 元,未申请收票金额:<strong class="red">{$detail.no_ticket}</strong> 元 』</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th style="width:60px;">序号</th>
|
||||
<th style="width:150px;">发票金额(元)</th>
|
||||
<th style="width:150px;">发票状态</th>
|
||||
<th style="width:200px;">发票号码</th>
|
||||
<th style="width:150px;">发票日期</th>
|
||||
<th style="width:100px;">付款状态</th>
|
||||
<th style="width:100px;">申请人</th>
|
||||
<th style="width:150px;">申请时间</th>
|
||||
<th style="width:60px;">操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.ticket" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td><span class="green">{$vo.amount}</span></td>
|
||||
{eq name="$vo.open_status" value="1"}
|
||||
<td><span class="green">已开具</span></td>
|
||||
<td>{$vo.code}</td>
|
||||
<td>{$vo.open_time|date='Y-m-d'}</td>
|
||||
{else/}
|
||||
<td><span class="red">未开具</span></td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
{/eq}
|
||||
<td>
|
||||
{eq name="$vo.pay_status" value="0"}<span class="red">未付款</span>{/eq}
|
||||
{eq name="$vo.pay_status" value="1"}<span class="blue">部分付款</span>{/eq}
|
||||
{eq name="$vo.pay_status" value="2"}<span class="green">全部付款</span>{/eq}
|
||||
</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
<td><span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/finance/ticket/view?id={$vo.id}">详情</span></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
{notempty name="$detail.payment"}
|
||||
<tr>
|
||||
<td colspan="6"><strong>付款记录</strong>『 已付款金额:<strong class="green">{$detail.has_payment}</strong> 元,未付款金额:<strong class="red">{$detail.no_payment}</strong> 元 』</</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0;">
|
||||
<tr>
|
||||
<th style="width:60px;">序号</th>
|
||||
<th style="width:150px;">付款金额(元)</th>
|
||||
<th style="width:200px;">付款日期</th>
|
||||
<th style="width:100px;">付款操作人</th>
|
||||
<th style="width:150px;">操作时间</th>
|
||||
<th style="width:60px;">操作</th>
|
||||
</tr>
|
||||
{volist name="$detail.payment" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td><span class="green">{$vo.amount}</span></td>
|
||||
<td>{$vo.pay_time | date='Y-m-d'}</td>
|
||||
<td>{$vo.admin}</td>
|
||||
<td>{$vo.create_time | date='Y-m-d H:i:s'}</td>
|
||||
<td><span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/finance/payment/view?id={$vo.ticket_id}">详情</span></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
|
||||
<tr>
|
||||
<td colspan="6"><strong>合同情况</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">录入人</td>
|
||||
<td>{$detail.admin_name} </td>
|
||||
<td class="layui-td-gray">录入时间</td>
|
||||
<td colspan="3">{$detail.create_time}</td>
|
||||
</tr>
|
||||
{gt name="$detail.archive_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">归档状态</td>
|
||||
<td>
|
||||
<span class="red">已归档</span>
|
||||
{if ($auth == 1) }
|
||||
<span class="layui-btn layui-btn-danger layui-btn-xs ml-4" data-event="archive" data-status="0">反确认归档</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class="layui-td-gray">归档人</td>
|
||||
<td>{$detail.archive_name} </td>
|
||||
<td class="layui-td-gray">归档时间</td>
|
||||
<td>{$detail.archive_time|date='Y-m-d H:i:s'}</td>
|
||||
{else/}
|
||||
<td class="layui-td-gray">归档状态</td>
|
||||
<td colspan="5">
|
||||
<span class="green">未归档</span>
|
||||
{if ($auth == 1) AND ($detail.check_status == 2) }
|
||||
<span class="layui-btn layui-btn-xs ml-4" data-event="archive" data-status="1">确认归档</span>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
{gt name="$detail.stop_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">中止人</td>
|
||||
<td>{$detail.stop_name}</td>
|
||||
<td class="layui-td-gray">中止时间</td>
|
||||
<td>{$detail.stop_time|date='Y-m-d H:i:s'}</td>
|
||||
<td colspan="2"><span class="layui-btn layui-btn-danger layui-btn-xs" data-event="stop" data-status="0">反中止合同</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">中止备注</td>
|
||||
<td colspan="5">{$detail.stop_remark|default='-'}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
{gt name="$detail.void_time" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">作废人</td>
|
||||
<td>{$detail.void_name}</td>
|
||||
<td class="layui-td-gray">作废时间</td>
|
||||
<td>{$detail.void_time|date='Y-m-d H:i:s'}</td>
|
||||
<td colspan="2"><span class="layui-btn layui-btn-danger layui-btn-xs" data-event="void" data-status="0">反作废合同</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">作废备注</td>
|
||||
<td colspan="5">{$detail.void_remark|default='-'}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div>盖章合同文件</div>
|
||||
<div><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">文件上传</button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="seal_ids" value="{$detail.seal_ids|default=''}">
|
||||
{volist name="$detail.seal_array" id="vo"}
|
||||
<div class="layui-col-md4" id="file_{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="layui-tab layui-tab-card" style="margin:0; background-color:#fff;" lay-filter="purchase" id="purchaseTab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-load="true">审批信息</li>
|
||||
<li>操作记录</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding:0;">
|
||||
<div class="layui-tab-item layui-show" style="padding-top:12px; background-color:#fff;">
|
||||
{if ($detail.stop_time == 0) AND ($detail.void_time == 0) }
|
||||
<div id="checkBox" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}" class="px-3 pb-3"></div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/purchase/view_log" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var purchase_id = {$detail.id};
|
||||
var auth = {$auth};
|
||||
var archive = {$detail.archive_time};
|
||||
var moduleInit = ['tool','oaCheck','oaPicker','oaEdit','uploadPlus'];
|
||||
let checking_btn='<span class="layui-btn layui-btn-warm" data-event="stop" data-status="1">中止合同</span><span class="layui-btn layui-btn-danger" data-event="void" data-status="1">作废合同</span>';
|
||||
function gouguInit() {
|
||||
var tool = layui.tool,element = layui.element,oaCheck=layui.oaCheck,oaPicker=layui.oaPicker,uploadPlus=layui.uploadPlus;
|
||||
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
"uidDelete":true,//是否开启只有上传人自己才能删除自己的附件
|
||||
"ajaxSave":function(res){
|
||||
$.ajax({
|
||||
url: "/contract/api/purchase_seal_ids",
|
||||
type:'post',
|
||||
data:{
|
||||
'id':purchase_id,
|
||||
'seal_ids':res,
|
||||
},
|
||||
success: function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
"ajaxDelete":function(res){
|
||||
$.ajax({
|
||||
url: "/contract/api/purchase_seal_ids",
|
||||
type:'post',
|
||||
data:{
|
||||
'id':purchase_id,
|
||||
'seal_ids':res,
|
||||
},
|
||||
success: function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
element.on('tab(purchase)', function(data){
|
||||
let index = data.index;
|
||||
if(index == 1){
|
||||
log();
|
||||
}
|
||||
});
|
||||
|
||||
oaCheck.init({
|
||||
check_name:'purchase',
|
||||
checking_btn:checking_btn,
|
||||
check_reversed :function(){
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
let eventCallback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
parent.layui.pageTable.reload();
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1200)
|
||||
}
|
||||
|
||||
//选择合同保管人弹窗
|
||||
$('body').on('click','#keeper',function () {
|
||||
let that = $(this);
|
||||
let ids=$(this).data('ids')+'',names = $(this).data('names')+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
tool.post("/contract/purchase/add", {'id':purchase_id,'keeper_uid':select_id.join(','),'scene':'change'}, eventCallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','#shares',function () {
|
||||
let that = $(this);
|
||||
let ids=$(this).data('ids')+'',names = $(this).data('names')+'';
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:2,//1是单选,2是多选
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
}
|
||||
tool.post("/contract/purchase/add", {'id':purchase_id,'share_ids':select_id.join(','),'scene':'change'}, eventCallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//归档操作
|
||||
$('body').on('click','[data-event="archive"]',function(){
|
||||
let status = $(this).data('status');
|
||||
let tips = '合同归档后将不能进行任何数据操作,确定要提交归档?';
|
||||
if(status==0){
|
||||
tips = '确定要反归档操作?';
|
||||
}
|
||||
layer.confirm(tips, {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/purchase_archive", {id: purchase_id,archive_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
|
||||
//中止操作
|
||||
$('body').on('click','[data-event="stop"]',function(){
|
||||
let status = $(this).data('status');
|
||||
if(status==1){
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
title: '请输入中止的理由',
|
||||
area: ['480px', '120px']
|
||||
}, function(value, index, elem){
|
||||
tool.post("/contract/api/purchase_stop", {id: purchase_id,stop_status:status,stop_remark:value}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
else{
|
||||
layer.confirm('确定要反中止该合同?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/purchase_stop", {id: purchase_id,stop_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
//作废操作
|
||||
$('body').on('click','[data-event="void"]',function(){
|
||||
let status = $(this).data('status');
|
||||
if(status==1){
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
title: '请输入作废的理由',
|
||||
area: ['480px', '120px']
|
||||
}, function(value, index, elem){
|
||||
tool.post("/contract/api/purchase_tovoid", {id: purchase_id,void_status:status,void_remark:value}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
else{
|
||||
layer.confirm('确定要反作废该合同?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
tool.post("/contract/api/purchase_tovoid", {id: purchase_id,void_status:status}, eventCallback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,9 @@
|
||||
<div>
|
||||
<div id="logList" class="log-timeline p-3"></div>
|
||||
</div>
|
||||
<script>
|
||||
function log(){
|
||||
let oaEdit = layui.oaEdit;
|
||||
oaEdit.log('logList','Purchase',purchase_id);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,36 @@
|
||||
<tr>
|
||||
<td colspan="6"><strong>物品信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">物品名称</th>
|
||||
<th width="100">单位</th>
|
||||
<th width="100">规格</th>
|
||||
<th width="100">采购单价</th>
|
||||
<th width="100">数量</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="sale-tr">
|
||||
<td colspan="7" style="padding:12px; text-align:center; color:#999">暂无物品信息</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="sale-tr">
|
||||
<td style="text-align:left;">{$vo.purchased_title|default=''}</td>
|
||||
<td>{$vo.purchased_unit|default=''}</td>
|
||||
<td>{$vo.purchased_specs|default=''}</td>
|
||||
<td>{$vo.purchased_price|default='0.00'}</td>
|
||||
<td>{$vo.purchased_num|default='1'}</td>
|
||||
<td>{$vo.purchased_subtotal|default='0.00'}</td>
|
||||
<td style="text-align:left;">{$vo.purchased_remark|default=''}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="6" style="text-align:left; color:#666"><strong>服务信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<table class="layui-table layui-table-min" style="margin:0">
|
||||
<tr>
|
||||
<th width="200">服务名称</th>
|
||||
<th width="200">服务周期</th>
|
||||
<th width="100">服务单价</th>
|
||||
<th width="100">服务次数</th>
|
||||
<th width="100">小计</th>
|
||||
<th>备注信息</th>
|
||||
</tr>
|
||||
{empty name="$detail.content_array"}
|
||||
<tr class="sale-tr">
|
||||
<td colspan="6" style="padding:12px text-align:center; color:#999">暂无服务信息</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{volist name="$detail.content_array" id="vo"}
|
||||
<tr class="sale-tr">
|
||||
<td style="text-align:left;">{$vo.service_title|default=''}</td>
|
||||
<td>{$vo.service_date|default=''}</td>
|
||||
<td>{$vo.service_price|default='0.00'}</td>
|
||||
<td>{$vo.service_num|default='1'}</td>
|
||||
<td>{$vo.service_subtotal|default='0.00'}</td>
|
||||
<td style="text-align:left;">{$vo.service_remark|default=''}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/contract/contract/voidlist">销售合同</a></li>
|
||||
<li class="layui-this"><a href="/contract/purchase/voidlist">采购合同</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="types">
|
||||
<option value="">选择合同性质</option>
|
||||
<option value="1">普通采购</option>
|
||||
<option value="2">物品采购</option>
|
||||
<option value="3">服务采购</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:122px;">
|
||||
<select name="cate_id">
|
||||
<option value="">选择合同类别</option>
|
||||
{volist name=":get_base_data('ContractCate');" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="sign_time" placeholder="选择合同签订日期" readonly name="sign_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="end_time" placeholder="选择合同到期日期" readonly name="end_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:220px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,合同编号/合同名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_contract" lay-filter="table_contract"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<h3>作废合同</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus,dropdown = layui.dropdown, tool = layui.tool,laydatePlus = layui.laydatePlus;
|
||||
//日期范围
|
||||
var sign_time = new laydatePlus({'target':'sign_time'});
|
||||
var end_time = new laydatePlus({'target':'end_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_contract"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/contract/purchase/voidlist"
|
||||
,is_excel: true
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-154'
|
||||
,cols: [[ //表头
|
||||
{
|
||||
field: 'id',
|
||||
title: 'ID号',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'code',
|
||||
title: '合同编号',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'name',
|
||||
title: '合同名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/contract/purchase/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'cate_title',
|
||||
title: '合同类别',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'types_name',
|
||||
title: '合同性质',
|
||||
align: 'center',
|
||||
width: 80,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.types + '">' + d.types_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'interval_time',
|
||||
title: '合同有效时间',
|
||||
align: 'center',
|
||||
width: 268,
|
||||
templet: function (d) {
|
||||
var html = d.interval_time;
|
||||
if (d.delay > 0 && d.delay < 30) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">' + d.delay + '天后到期</span>';
|
||||
}
|
||||
if (d.delay == 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">已过期</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'cost',
|
||||
title: '合同金额(元)',
|
||||
align: 'right',
|
||||
width: 100
|
||||
},{
|
||||
field: 'void_name',
|
||||
title: '作废人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'void_time',
|
||||
title: '作废日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'sign_name',
|
||||
title: '签定人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'sign_time',
|
||||
title: '签订日期',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'keeper_name',
|
||||
title: '保管人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 60,
|
||||
align: 'center',
|
||||
ignoreExport:true,
|
||||
templet: function (d) {
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_contract)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/contract/purchase/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,130 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-1">新增采购品</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">采购品名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" autocomplete="off" placeholder="请输入采购品名称" lay-verify="required" lay-reqText="请输入采购品名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">采购品分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择分类">
|
||||
<option value="">请选择分类</option>
|
||||
{volist name=":set_recursion(get_base_data('PurchasedCate'))" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray" rowspan="3">缩略图</td>
|
||||
<td rowspan="3" style="width: 150px; vertical-align:top:">
|
||||
<div class="layui-upload">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">缩略图(尺寸:240x136)</button>
|
||||
<div class="layui-upload-list" id="demo1" style="width: 150px; height:90px; overflow: hidden;">
|
||||
<img src="" style="max-width: 100%; height:90px;" />
|
||||
<input type="hidden" name="thumb" value="">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购品编码<font>*</font></td>
|
||||
<td><input type="text" name="code" autocomplete="off" value="{:get_codeno('PR')}" readonly class="layui-input" lay-verify="required" lay-reqText="请输入采购品编码"></td>
|
||||
<td class="layui-td-gray">单位<font>*</font></td>
|
||||
<td><input type="text" name="unit" autocomplete="off" value="" class="layui-input" lay-verify="required" lay-reqText="请输入采购品单位"></td>
|
||||
<td class="layui-td-gray">规格</td>
|
||||
<td><input type="text" name="specs" autocomplete="off" placeholder="请输入采购品规格" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购价(元)<font>*</font></td>
|
||||
<td><input type="text" name="purchase_price" autocomplete="off" placeholder="请输入采购品采购价" class="layui-input" lay-verify="required|number" lay-reqText="请输入采购价"></td>
|
||||
<td class="layui-td-gray">是否实物<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="radio" name="is_object" value="1" title="是" checked>
|
||||
<input type="radio" name="is_object" value="2" title="否" >
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div class="layui-input-inline">采购品附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" id="fileBoxInput" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">采购品描述<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-1">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,upload = layui.upload,uploadPlus = layui.uploadPlus;
|
||||
|
||||
//封面上传
|
||||
var uploadInst = upload.render({
|
||||
elem: '#test1'
|
||||
, url: "/api/index/upload"
|
||||
, done: function (res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
//上传成功
|
||||
$('#demo1 input').attr('value', res.data.id);
|
||||
$('#demo1 img').attr('src', res.data.filepath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 480
|
||||
});
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
data.field.content = tinyMCE.editors['container'].getContent();
|
||||
if (data.field.content == '') {
|
||||
layer.msg('请先完善采购品的描述内容');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/purchased/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,178 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tree-left{width:220px; float:left; height:100%; overflow: scroll; border:1px solid #eeeeee; background-color:#fff; padding:12px 12px 12px 5px;}
|
||||
.tree-left h3{font-size:16px; height:30px; padding-left:10px; font-weight:800}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page" style="height:calc(100% - 36px); box-sizing: border-box;">
|
||||
<div class="tree-left">
|
||||
<h3>采购品分类</h3>
|
||||
<div id="cate"></div>
|
||||
</div>
|
||||
<div class="body-table" style="margin-left:248px; overflow:hidden;">
|
||||
<form class="layui-form gg-form-bar border-x border-t">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="status">
|
||||
<option value="">选择状态</option>
|
||||
<option value="1">正常</option>
|
||||
<option value="0">禁用</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px;">
|
||||
<input type="text" name="keywords" placeholder="关键字,采购品名称/采购品编码" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="reset">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm addNew" type="button">+ 添加采购品</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool,tree = layui.tree,form = layui.form;
|
||||
$.ajax({
|
||||
url: "/contract/api/get_purchasedcate_tree",
|
||||
type:'get',
|
||||
success:function(res){
|
||||
//仅节点左侧图标控制收缩
|
||||
tree.render({
|
||||
elem: '#cate',
|
||||
data: res.trees,
|
||||
onlyIconControl: true, //是否仅允许节点左侧图标控制展开收缩
|
||||
click: function(obj){
|
||||
//layer.msg(JSON.stringify(obj.data));
|
||||
$('#cate').find('.layui-tree-main').removeClass('on');
|
||||
$(obj.elem).find('.layui-tree-main').eq(0).addClass('on');
|
||||
layui.pageTable.reload({
|
||||
where: {cate_id: obj.data.id},
|
||||
page:{curr:1}
|
||||
});
|
||||
$('[name="keywords"]').val('');
|
||||
$('[name="status"]').val('');
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
$('[lay-filter="reset"]').click(function(){
|
||||
$('#cate').find('.layui-tree-main').removeClass('on');
|
||||
});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'采购品列表'
|
||||
,url: "/contract/purchased/datalist"
|
||||
,is_excel: true
|
||||
,cellMinWidth: 60
|
||||
,height: 'full-114'
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'code',width:150, title: '采购品编码', align:'center'}
|
||||
,{field:'cate',width:150, title: '采购品分类', align:'center'}
|
||||
,{field:'title',title: '采购品名称',minWidth:240}
|
||||
,{field:'purchase_price',width:100, title: '采购价(元)', align:'center','style':'color:#1e9fff'}
|
||||
,{field:'unit',width:60, title: '单位', align:'center'}
|
||||
,{field:'specs',width:60, title: '规格', align:'center'}
|
||||
,{field:'status', title: '状态',width:60,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:150,fixed:'right', title: '操作', align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+btn3+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
tool.side("/contract/purchased/add?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'view'){
|
||||
tool.side("/contract/purchased/view?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该采购品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/purchased/set", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该采购品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/purchased/set", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'del'){
|
||||
layer.confirm('确定要删除该采购品吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/purchased/del", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.addNew',function(){
|
||||
tool.side("/contract/purchased/add");
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data){
|
||||
layui.pageTable.reload({where:data.field,page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,136 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">编辑采购品</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">采购品名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="{$detail.title}" autocomplete="off" placeholder="请输入采购品名称" lay-verify="required" lay-reqText="请输入采购品名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">采购品分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="cate_id" lay-verify="required" lay-reqText="请选择分类">
|
||||
<option value="">请选择分类</option>
|
||||
{volist name=":set_recursion(get_base_data('PurchasedCate'))" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.cate_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray" rowspan="3">缩略图</td>
|
||||
<td rowspan="3" style="width: 150px; vertical-align:top:">
|
||||
<div class="layui-upload">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">缩略图(尺寸:240x136)</button>
|
||||
<div class="layui-upload-list" id="demo1" style="width: 150px; height:90px; overflow: hidden;">
|
||||
<img src="{:get_file($detail.thumb)}" style="max-width: 100%; height:90px;" />
|
||||
<input type="hidden" name="thumb" value="{$detail.thumb}">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购品编码<font>*</font></td>
|
||||
<td><input type="text" name="code" value="{$detail.code}" readonly class="layui-input" lay-verify="required"></td>
|
||||
<td class="layui-td-gray">单位<font>*</font></td>
|
||||
<td><input type="text" name="unit" autocomplete="off" value="{$detail.unit}" class="layui-input" lay-verify="required" lay-reqText="请输入采购品单位"></td>
|
||||
<td class="layui-td-gray">规格</td>
|
||||
<td><input type="text" name="specs" autocomplete="off" value="{$detail.specs}" placeholder="请输入采购品规格" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购价(元)</td>
|
||||
<td><input type="text" name="purchase_price" value="{$detail.purchase_price}" lay-verify="required|number" lay-reqText="请输入采购品采购价" autocomplete="off" placeholder="请输入采购品采购价" class="layui-input"></td>
|
||||
<td class="layui-td-gray">是否实物<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="radio" name="is_object" value="1" title="是" {eq name="$detail.is_object" value="1"} checked {/eq}>
|
||||
<input type="radio" name="is_object" value="2" title="否" {eq name="$detail.is_object" value="2"} checked {/eq}>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">采购品附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">采购品描述<font>*</font></td>
|
||||
<td colspan="7">
|
||||
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0">{$detail.content}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-1">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,upload = layui.upload,uploadPlus = layui.uploadPlus;
|
||||
|
||||
//封面上传
|
||||
var uploadInst = upload.render({
|
||||
elem: '#test1'
|
||||
, url: "/api/index/upload"
|
||||
, done: function (res) {
|
||||
layer.msg(res.msg);
|
||||
if (res.code == 0) {
|
||||
//上传成功
|
||||
$('#demo1 input').attr('value', res.data.id);
|
||||
$('#demo1 img').attr('src', res.data.filepath);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 480
|
||||
});
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
data.field.content = tinyMCE.editors['container'].getContent();
|
||||
if (data.field.content == '') {
|
||||
layer.msg('请先完善采购品的描述内容');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/purchased/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,71 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-4">
|
||||
<h3 class="pb-1">采购品详情</h3>
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">采购品名称</td>
|
||||
<td colspan="3">{$detail.title}</td>
|
||||
<td class="layui-td-gray-2">采购品分类</td>
|
||||
<td>{$detail.cate}</td>
|
||||
<td class="layui-td-gray" rowspan="3">缩略图</td>
|
||||
<td rowspan="3" style="width:150px;">
|
||||
<div class="layui-upload-list" id="demo1" style="width: 150px; height:90px; overflow: hidden;">
|
||||
<img src="{:get_file($detail.thumb)}" style="max-width: 100%; height:90px;" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购品编码</td>
|
||||
<td>{$detail.code}</td>
|
||||
<td class="layui-td-gray">单位</td>
|
||||
<td>{$detail.unit}</td>
|
||||
<td class="layui-td-gray">规格</td>
|
||||
<td>{$detail.specs}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">采购价(元)</td>
|
||||
<td>{$detail.purchase_price}</td>
|
||||
<td class="layui-td-gray">是否实物</td>
|
||||
<td colspan="3">
|
||||
{eq name="$detail.is_object" value="1"}是{/eq}
|
||||
{eq name="$detail.is_object" value="2"}否{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件</td>
|
||||
<td colspan="7">
|
||||
<div class="layui-row">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td class="layui-td-gray" colspan="8" style="text-align:left; color:#666"><strong>采购品描述</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
{$detail.content|raw}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,91 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-1">采购品分类</h3>
|
||||
{eq name="$id" value="0"}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">父级分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
|
||||
<option value="0">作为顶级分类</option>
|
||||
{volist name="$cates" id="v"}
|
||||
<option value="{$v.id}" {eq name="$pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">分类名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">描述</td>
|
||||
<td colspan="5"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
{else/}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">父级分类<font>*</font></td>
|
||||
<td>
|
||||
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
|
||||
<option value="0">作为顶级分类</option>
|
||||
{volist name="$cates" id="v"}
|
||||
<option value="{$v.id}" {eq name="$detail.pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">分类名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" value="{$detail.sort}" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">描述</td>
|
||||
<td colspan="5"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea">{$detail.desc}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
{/eq}
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="id" value="{$id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function () {
|
||||
parent.location.reload();
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/purchasedcate/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,86 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<div class="gg-form-bar border-t border-x" style="padding-bottom:10px;">
|
||||
<button class="layui-btn layui-btn-sm add-menu">+ 添加采购品分类</button>
|
||||
</div>
|
||||
<div>
|
||||
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="switchStatus">
|
||||
<input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="status" {{ d.status == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var treeTable = layui.treeTable, tool = layui.tool;
|
||||
|
||||
layui.pageTable = treeTable.render({
|
||||
elem: '#treeTable'
|
||||
,url: "/contract/purchasedcate/datalist"
|
||||
,tree: { // treeTable 特定属性集
|
||||
customName: {name:'title'},
|
||||
data: {},
|
||||
view: {
|
||||
showIcon:false,
|
||||
expandAllDefault:true
|
||||
},
|
||||
async: {},
|
||||
callback: {}
|
||||
}
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field: 'sort', title: '排序',align:'center', width:80}
|
||||
,{field:'title', width:240, title: '分类名称'}
|
||||
,{field:'pid', title: '父级ID', width:80, align:'center'}
|
||||
,{field:'desc', title: '描述', }
|
||||
,{width:160,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子分类</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
]]
|
||||
,page:false
|
||||
//,skin:'line'
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
$('.add-menu').on('click', function(){
|
||||
tool.side('/contract/purchasedcate/add');
|
||||
return;
|
||||
});
|
||||
|
||||
//操作按钮
|
||||
treeTable.on('tool(treeTable)', function (obj) {
|
||||
if (obj.event === 'add') {
|
||||
tool.side('/contract/purchasedcate/add?pid='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side('/contract/purchasedcate/add?id='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete('/contract/purchasedcate/del', { id: obj.data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">服务内容</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">服务内容<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入服务内容" lay-reqText="请输入服务内容" class="layui-input" value="{$detail.title|default=''}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">费用(元)<font>*</font></td>
|
||||
<td><input type="text" name="price" lay-verify="required" autocomplete="off" placeholder="请输入费用" lay-reqText="请输入费用" class="layui-input" value="{$detail.price|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td><input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/services/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,98 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_services" lay-filter="table_services"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加服务内容</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_services"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/contract/services/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '服务内容'}
|
||||
,{field:'price',title: '费用(元)',width:100, align:'right'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_services)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
tool.side("/contract/services/add?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/services/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/services/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
tool.side("/contract/services/add");
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,92 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">新增供应商</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" placeholder="请输入供应商名称" lay-verify="required" lay-reqText="请输入供应商名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">供应商电话</td>
|
||||
<td><input type="text" name="phone" autocomplete="off" placeholder="请输入供应商电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商地址</td>
|
||||
<td colspan="3"><input type="text" name="address" placeholder="请输入供应商地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">供应商邮箱</td>
|
||||
<td><input type="text" name="email" autocomplete="off" placeholder="请输入供应商邮箱" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">供应商简介</td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入内容" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">相关附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>首要联系人信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人</td>
|
||||
<td><input type="text" name="c_name" autocomplete="off" placeholder="请输入联系人姓名" class="layui-input"></td>
|
||||
<td class="layui-td-gray">联系电话</td>
|
||||
<td><input type="text" name="c_mobile" autocomplete="off" placeholder="请输入联系人电话" class="layui-input"></td>
|
||||
<td class="layui-td-gray">性别</td>
|
||||
<td>
|
||||
<input type="radio" name="c_sex" value="1" title="男">
|
||||
<input type="radio" name="c_sex" value="2" title="女" >
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus;
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
if(data.field.c_name!=='' || data.field.c_mobile!==''){
|
||||
if(!data.field.c_sex){
|
||||
layer.msg('请选择首要联系的性别');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/supplier/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,74 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">新增联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称</td>
|
||||
<td colspan="5">{$supplier_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系人姓名<font>*</font></td>
|
||||
<td><input type="text" name="name" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input"></td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td><input type="text" name="mobile" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input"></td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男">
|
||||
<input type="radio" name="sex" value="2" title="女">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td><input type="text" name="wechat" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input"></td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td><input type="text" name="qq" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input"></td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td><input type="text" name="email" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td><input type="text" name="nickname" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input"></td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td><input type="text" name="department" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input"></td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td><input type="text" name="position" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="sid" value="{$supplier_id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/supplier/contact_add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,74 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">编辑联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称</td>
|
||||
<td colspan="5">{$detail.supplier}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系人姓名<font>*</font></td>
|
||||
<td><input type="text" name="name" value="{$detail.name}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input"></td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td><input type="text" name="mobile" value="{$detail.mobile}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input"></td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男" {eq name="$detail.sex" value="1"} checked{/eq}>
|
||||
<input type="radio" name="sex" value="2" title="女" {eq name="$detail.sex" value="2"} checked{/eq}>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td><input type="text" name="wechat" value="{$detail.wechat}" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input"></td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td><input type="text" name="qq" value="{$detail.qq}" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input"></td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td><input type="text" name="email" value="{$detail.email}" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td><input type="text" name="nickname" value="{$detail.nickname}" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input"></td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td><input type="text" name="department" value="{$detail.department}" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input"></td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td><input type="text" name="position" value="{$detail.position}" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/supplier/contact_add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" id="barsearchform">
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="text" name="keywords" placeholder="供应商名称/联系人名称" class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加供应商</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, form = layui.form;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'供应商列表'
|
||||
,url: "/contract/supplier/datalist"
|
||||
,page: true
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '供应商名称',minWidth:300}
|
||||
,{field:'address',width:280, title: '供应商地址'}
|
||||
,{field:'phone',width:150, title: '供应商电话', align:'center'}
|
||||
,{field:'email',width:150, title: '供应商邮箱', align:'center'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:150,fixed:'right', title: '操作',ignoreExport:true, align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+btn3+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
tool.side("/contract/supplier/add?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'view'){
|
||||
tool.side("/contract/supplier/view?id="+obj.data.id);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该供应商吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/supplier/set", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该供应商吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/contract/supplier/set", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'del'){
|
||||
layer.confirm('确定要删除该供应商吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/supplier/del", { id: obj.data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
tool.side("/contract/supplier/add");
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,76 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">编辑供应商</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="{$detail.title}" autocomplete="off" placeholder="请输入供应商名称" lay-verify="required" lay-reqText="请输入供应商名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">供应商电话</td>
|
||||
<td><input type="text" name="phone" value="{$detail.phone}" autocomplete="off" placeholder="请输入供应商电话" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商地址</td>
|
||||
<td colspan="3"><input type="text" name="address" value="{$detail.address}" autocomplete="off" placeholder="请输入供应商地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">供应商邮箱</td>
|
||||
<td><input type="text" name="email" value="{$detail.email}" autocomplete="off" placeholder="请输入供应商邮箱" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">供应商简介</td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入内容" class="layui-textarea">{$detail.content}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">相关附件</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus;
|
||||
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function(data){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/contract/supplier/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,141 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">供应商详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称</td>
|
||||
<td>{$detail.title}</td>
|
||||
<td class="layui-td-gray-2">供应商电话</td>
|
||||
<td>{$detail.phone}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商地址</td>
|
||||
<td>{$detail.address}</td>
|
||||
<td class="layui-td-gray-2">供应商邮箱</td>
|
||||
<td>{$detail.email}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">供应商简介</td>
|
||||
<td colspan="3">{$detail.content}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">相关附件</div>
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
<tr>
|
||||
<td colspan="6"><strong>联系人信息</strong><span class="layui-btn layui-btn-xs add-contact ml-3">+ 新增联系人</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><table class="layui-hide" id="contact" lay-filter="contact"></table></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const supplier_id = '{$detail.id}';
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
let tool = layui.tool, table = layui.table;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#contact',
|
||||
title: '联系人列表',
|
||||
cellMinWidth:80,
|
||||
url: '/contract/api/get_supplier_contact',
|
||||
where:{'supplier_id':supplier_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'name',width:100,title: '联系人姓名', align:'center'}
|
||||
,{field:'status', title: '性别',width:80,align:'center',templet: function(d){
|
||||
var html='未知';
|
||||
var html1='<span class="green">男</span>';
|
||||
var html2='<span class="blue">女</span>';
|
||||
if(d.sex==1){
|
||||
return html1;
|
||||
}
|
||||
if(d.sex==2){
|
||||
return html2;
|
||||
}
|
||||
else{
|
||||
return html;
|
||||
}
|
||||
}}
|
||||
,{field:'mobile',width:100,title: '手机号码', align:'center'}
|
||||
,{field:'qq',width:100,title: 'QQ号码', align:'center'}
|
||||
,{field:'wechat',width:100,title: '微信号码', align:'center'}
|
||||
,{field:'email',title: '电子邮箱', align:'center'}
|
||||
,{field:'position',width:120,title: '担任职位', align:'center'}
|
||||
,{field:'department',width:120,title: '部门', align:'center'}
|
||||
,{fixed:'right',width:190,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="set">设为首要联系人</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.is_default==1){
|
||||
return '<span class="red" style="margin-right:10px;">首要联系人</span>'+btn;
|
||||
}
|
||||
else{
|
||||
return html+btn+btn1+btn2+'</div>';
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('.add-contact').on('click',function(){
|
||||
tool.side('/contract/supplier/contact_add?sid='+supplier_id);
|
||||
});
|
||||
|
||||
table.on('tool(contact)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/contract/supplier/contact_add?id='+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'set'){ //查看
|
||||
layer.confirm('确定要设置该联系人为首要联系人吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/contract/api/set_supplier_contact",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(layEvent === 'del'){ //删除
|
||||
layer.confirm('确定要删除该联系人吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete('/contract/supplier/contact_del',{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,90 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">新增联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称</td>
|
||||
<td colspan="5">{$supplier_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">姓名<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="name" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="mobile" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男">
|
||||
<input type="radio" name="sex" value="2" title="女">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td>
|
||||
<input type="text" name="wechat" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>
|
||||
<input type="text" name="qq" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td>
|
||||
<input type="text" name="email" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td>
|
||||
<input type="text" name="nickname" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td>
|
||||
<input type="text" name="department" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td>
|
||||
<input type="text" name="position" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<input type="hidden" name="sid" value="{$supplier_id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/supplier/contact/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,90 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">编辑联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">供应商名称</td>
|
||||
<td colspan="5">{$detail.supplier}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">姓名<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="name" value="{$detail.name}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="mobile" value="{$detail.mobile}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男" {eq name="$detail.sex" value="1"} checked{/eq}>
|
||||
<input type="radio" name="sex" value="2" title="女" {eq name="$detail.sex" value="2"} checked{/eq}>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td>
|
||||
<input type="text" name="wechat" value="{$detail.wechat}" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>
|
||||
<input type="text" name="qq" value="{$detail.qq}" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td>
|
||||
<input type="text" name="email" value="{$detail.email}" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td>
|
||||
<input type="text" name="nickname" value="{$detail.nickname}" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td>
|
||||
<input type="text" name="department" value="{$detail.department}" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td>
|
||||
<input type="text" name="position" value="{$detail.position}" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/supplier/contact/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
Reference in New Issue
Block a user