first commit

This commit is contained in:
2026-07-23 09:40:36 +08:00
commit 090abf48fa
989 changed files with 145728 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
{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">客户名称</td>
<td colspan="3">{$customer_name}</td>
<td class="layui-td-gray-2">客户联系人<font>*</font></td>
<td>
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
<option value="">请选择</option>
{volist name=":customer_contact($customer_id)" id="v"}
<option value="{$v.id}">{$v.name}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">机会标题<font>*</font></td>
<td colspan="3"><input type="text" name="title" 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="discovery_time" readonly lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray">销售阶段<font>*</font></td>
<td>
<select name="stage" lay-verify="required" lay-reqText="请选择">
<option value="">请选择</option>
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">预计金额<font>*</font></td>
<td><input type="text" name="expected_amount" autocomplete="off" lay-verify="required|number" lay-reqText="请输入预计金额" placeholder="请输入预计金额" class="layui-input"></td>
<td class="layui-td-gray-2">预计签单时间<font>*</font></td>
<td><input type="text" name="expected_time" readonly lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray" style="vertical-align:top">需求描述<font>*</font></td>
<td colspan="5"><textarea name="content" placeholder="请输入需求描述" lay-verify="required" lay-reqText="请输入需求描述" class="layui-textarea"></textarea></td>
</tr>
<tr>
<td class="layui-td-gray">归属人员<font>*</font></td>
<td>
<input type="text" name="belong_name" readonly placeholder="请选择归属人员" class="layui-input picker-admin">
<input type="hidden" name="belong_uid" lay-verify="required" lay-reqText="请选择归属人员">
</td>
<td class="layui-td-gray">协助人员</td>
<td colspan="3">
<input type="text" name="assist_names" placeholder="请选择协助人员" class="layui-input picker-admin" data-type="2">
<input type="hidden" name="assist_ids">
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="cid" value="{$customer_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','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaPicker = layui.oaPicker;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000,'chanceTable');
}
}
let clickbtn = $(this);
tool.post("/customer/chance/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+127
View File
@@ -0,0 +1,127 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<form class="layui-form gg-form-bar border-x border-t" lay-filter="barsearchform">
{gt name="$is_auth" value="0"}
<div class="layui-input-inline user-name" style="width:100px;">
<input type="text" name="username" placeholder="选择归属人" class="layui-input picker-admin" readonly />
<input type="text" name="uid" value="" style="display:none" />
</div>
{/gt}
<div class="layui-input-inline" style="width:120px;">
<select name="stage">
<option value="">销售阶段</option>
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</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="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>
<h3>线索机会</h3>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaPicker','tablePlus'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool, form = layui.form;
layui.chanceTable = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,title:'线索机会列表'
,url: "/customer/chance/datalist"
,cellMinWidth: 80
,page: true //开启分页
,is_excel: true
,height: 'full-114'
,limit: 20
,cols: [[
{field: 'id', title: '编号', width: 80, align: 'center'}
,{field:'belong_name',title: '归属人',align:'center',width: 80}
,{field:'title',title: '机会主题'}
,{field:'customer',title: '关联客户',width: 300}
,{field:'discovery_time',title: '发现时间',align:'center',width: 100}
,{ field: 'expected_time', title: '预计签单时间', width: 110, align: 'center'}
,{ field: 'expected_amount', title: '预计签单金额', width: 110, align: 'center'}
,{field:'stage_name',title: '当前阶段',width: 80, align: 'center'}
,{field:'is_contract',title: '是否签单', align:'center',width: 80,templet: function(d){
if(d.is_contract>0){
return '<span class="green">已签单</span>';
}
else{
return '<span class="red">未签单</span>';
}
}}
,{fixed:'right',width:130,title: '操作', align:'center',templet: function(d){
var html = '<div class="layui-btn-group">';
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
if(d.is_contract>0){
btn1='';
btn3='';
}
if(d.admin_id == login_admin){
return '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
}
else{
return '<div class="layui-btn-group">'+btn2+'</div>';
}
}}
]]
});
table.on('tool(test)', function(obj){
var data = obj.data; //获得当前行数据
var layEvent = obj.event;
if(layEvent === 'edit'){ //编辑
let url = '/customer/chance/add/id/'+data.id;
tool.side(url);
}
if(layEvent === 'view'){ //查看
let url = '/customer/chance/view/id/'+data.id;
tool.side(url);
}
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('/customer/chance/chance_del',{'id':data.id},callback);
layer.close(index);
});
}
return false;
})
//监听搜索提交
form.on('submit(webform)', function(data) {
layui.pageTable.reload({
where: data.field,
page: {curr: 1}
});
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+90
View File
@@ -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">客户名称</td>
<td colspan="3">{$detail.customer}</td>
<td class="layui-td-gray-2">客户联系人<font>*</font></td>
<td>
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
<option value="">请选择</option>
{volist name=":customer_contact($detail.cid)" id="v"}
<option value="{$v.id}" {eq name="$v.id" value="$detail.contact_id"} selected{/eq}>{$v.name}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">机会标题<font>*</font></td>
<td colspan="3"><input type="text" name="title" value="{$detail.title}" 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="discovery_time" value="{$detail.discovery_time|date='Y-m-d'}" readonly lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input tool-time">
</td>
</tr>
<tr>
<td class="layui-td-gray">销售阶段<font>*</font></td>
<td>
<select name="stage" lay-verify="required" lay-reqText="请选择">
<option value="">请选择</option>
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
<option value="{$v.id}" {eq name="$v.id" value="$detail.stage"} selected{/eq}>{$v.title}</option>
{/volist}
</td>
<td class="layui-td-gray">预计金额<font>*</font></td>
<td> <input type="text" name="expected_amount" autocomplete="off" value="{$detail.expected_amount}" lay-verify="required|number" lay-reqText="请输入预计金额" placeholder="请输入预计金额" class="layui-input"></td>
<td class="layui-td-gray-2">预计签单时间<font>*</font></td>
<td><input type="text" name="expected_time" value="{$detail.expected_time|date='Y-m-d'}" readonly lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray" style="vertical-align:top">需求描述<font>*</font></td>
<td colspan="5"><textarea name="content" placeholder="请输入需求描述" lay-verify="required" lay-reqText="请输入需求描述" class="layui-textarea">{$detail.content}</textarea></td>
</tr>
<tr>
<td class="layui-td-gray">归属人员<font>*</font></td>
<td>
<input type="text" name="belong_name" value="{$detail.belong_name}" readonly placeholder="请选择归属人员" class="layui-input picker-admin">
<input type="hidden" name="belong_uid" value="{$detail.belong_uid}" lay-verify="required" lay-reqText="请选择归属人员">
</td>
<td class="layui-td-gray">协助人员</td>
<td colspan="3">
<input type="text" name="assist_names" value="{$detail.assist_names}" placeholder="请选择协助人员" class="layui-input picker-admin" data-type="2">
<input type="hidden" name="assist_ids" value="{$detail.assist_ids}">
</td>
</tr>
</table>
<div class="pt-4">
<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','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaPicker = layui.oaPicker;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code==0){
tool.sideClose(1000,'chanceTable');
}
}
let clickbtn = $(this);
tool.post("/customer/chance/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+57
View File
@@ -0,0 +1,57 @@
{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">客户名称</td>
<td colspan="3">{$detail.customer}</td>
<td class="layui-td-gray-2">客户联系人</td>
<td>{$detail.contact}</td>
</tr>
<tr>
<td class="layui-td-gray">机会标题</td>
<td colspan="3">{$detail.title}</td>
<td class="layui-td-gray">发现时间</td>
<td>{$detail.discovery_time|date="Y-m-d"}</td>
</tr>
<tr>
<td class="layui-td-gray">销售阶段</td>
<td>{$detail.stage_name}</td>
<td class="layui-td-gray">预计金额</td>
<td>{$detail.expected_amount}</td>
<td class="layui-td-gray-2">预计签单时间</td>
<td>{$detail.expected_time|date="Y-m-d"}</td>
</tr>
<tr>
<td class="layui-td-gray" style="vertical-align:top">需求描述</td>
<td colspan="5">{$detail.content}</td>
</tr>
<tr>
<td class="layui-td-gray">归属人员</td>
<td>{$detail.belong_name}</td>
<td class="layui-td-gray">协助人员</td>
<td colspan="3">{$detail.assist_names}</td>
</tr>
{notempty name="$detail.contract"}
<tr>
<td class="layui-td-gray">签单合同</td>
<td colspan="5">{$detail.contract} <span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/contract/contract/view?id={$detail.contract_id}">详情</span></td>
</tr>
{/notempty}
</table>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
}
</script>
{/block}
<!-- /脚本 -->