update new function

master
嘉祥 詹 2024-04-10 18:56:45 +08:00
parent 43c817d0db
commit 91b785b7ea
7 changed files with 591 additions and 2 deletions

View File

@ -59,6 +59,32 @@ namespace Journeys_WantHome.Controllers
this._httpContextAccessor = httpContextAccessor;
}
[Route("kolProjectViewList")]
public ActionResult KolProjectViewList(IFormCollection obj) {
kolProjectViewResult ret = new kolProjectViewResult();
authToken token = new authToken(this._httpContextAccessor);
if (token.user_isLogin == false)
{
HttpContext.Response.Cookies.Delete("token_key");
ret.ret = "no";
ret.err_code = "99999";
ret.message = "非登入狀態!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
string project_uid = obj["project_uid"].ToString();
List<kolProjectView> kolProjectViews = conn.Query<kolProjectView>("select * from kolProjectView where project_uid = @project_uid order by kol_uid, optionItem_order", new { project_uid = project_uid }).ToList();
foreach (kolProjectView objView in kolProjectViews)
{
ret.detail.Add(new kolProjectViewDetail(objView));
}
ret.ret = "yes";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
[HttpGet]
[Route("fileService")]
public ActionResult FileService(string uid) {
@ -1843,6 +1869,13 @@ namespace Journeys_WantHome.Controllers
}
public class kolProjectViewResult
{
public string ret { get; set; } = "no";
public string err_code { get; set; } = "0000";
public string message { get; set; } = "";
public List<kolProjectViewDetail> detail { get; set; } = new List<kolProjectViewDetail>();
}
public class kolProjectListResult
{
public string ret { get; set; } = "no";

View File

@ -8,6 +8,33 @@ using Newtonsoft.Json.Linq;
public class DbTableClass
{
[Table("kolProjectView")]
public class kolProjectView
{
public string kol_name { get; set; } = "";
public string kol_uid { get; set; } = "";
public string kol_descript { get; set; } = "";
public string kol_photo { get; set; } = "";
public string project_uid { get; set; } = "";
public string kolProject_uid { get; set; } = "";
public string kolProject_isExec { get; set; } = "";
public string kolProject_noExecReason { get; set; } = "";
public string kolProject_memo { get; set; } = "";
public string user_uid { get; set; } = "";
public string user_name { get; set; } = "";
public DateTime kolProject_modifydate { get; set; }
public string optionItem_uid { get; set; } = "";
public string mediaItem_uid { get; set; } = "";
public string kolProjectPrice_date { get; set; } = "";
public int kolProjectPrice_cost { get; set; }
public string kolProjectPrice_num { get; set; } = "";
public string kolProjectPrice_other { get; set; } = "";
public string mediaItem_name { get; set; } = "";
public string optionItem_name { get; set; } = "";
public int optionItem_order { get; set; } = 0;
}
[Table("kolfiles")]
public class kolfiles
{

View File

@ -0,0 +1,39 @@
using Dapper;
using Dapper.Contrib.Extensions;
using NPOI.SS.Formula.Functions;
using System.Data.SqlClient;
using static DbTableClass;
public class kolProjectViewDetail : kolProjectView
{
DbConn dbConn = new DbConn();
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
public List<kolProjectEvaluate> kolProjectEvaluates = new List<kolProjectEvaluate>();
private kolProjectView _kolProjectView;
public kolProjectViewDetail() {
_kolProjectView = new kolProjectView();
}
public kolProjectViewDetail(kolProjectView kolProjectView)
{
this._kolProjectView = kolProjectView;
Type dataType = _kolProjectView.GetType();
foreach (var prop in dataType.GetProperties())
{
string propName = prop.Name;
var valueProperty = dataType.GetProperty(propName);
object propValue = valueProperty.GetValue(_kolProjectView, null);
this.GetType().GetProperty(propName).SetValue(this, propValue);
}
kolProjectEvaluates = conn.Query<kolProjectEvaluate>("select * from kolProjectEvaluate where kolProject_uid = @kolProject_uid ", new { kolProject_uid = _kolProjectView.kolProject_uid}).ToList();
}
}

View File

@ -853,3 +853,228 @@
</div><!-- /.modal-dialog -->
</div>
</form><!-- /.modal -->
<!-- .modal -->
<form id="clientPreivewForm" name="clientPreviewForm">
<div class="modal fade" id="clientPreviewModal" tabindex="-1" role="dialog" aria-labelledby="clientPreviewModalLabel" data-backdrop="static" aria-hidden="true">
<!-- .modal-dialog -->
<div class="modal-dialog modal-lg" role="document">
<!-- .modal-content -->
<div class="modal-content">
<!-- .modal-header -->
<div class="modal-header">
<h6 id="socialModalLabel" class="modal-title inline-editable">
<span class="sr-only">KOL Profile</span> <input id="previewKol_name1" type="text" class="form-control form-control-lg" value="" placeholder="KOL Profile" readonly="readonly " required="">
</h6>
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
</button>
</div><!-- /.modal-header -->
<!-- .modal-body -->
<div class="modal-body">
<div class="form-row">
<!-- form column -->
<label for="input02" class="col-md-3">KOL 名稱</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<input type="text" class="form-control" id="previewKol_name" value="" readonly="readonly">
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input03" class="col-md-3">KOL 介紹</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<textarea class="form-control" id="previewKol_descript" readonly="readonly"></textarea>
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">聯繫方式</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_contact">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">KOL 成員</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_member">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">KOL 類型</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_type">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">粉絲輪廓</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_fans">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">粉絲男女比</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_sexualRatio">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
<div class="section-block">
<h6 class="section-title"> 年齡層占比 </h6><!-- metric row -->
<div class="metric-row">
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="13to17"></span>
</p>
<h2 class="metric-label"> 13-17歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="18to24"></span>
</p>
<h2 class="metric-label"> 18-24歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="25to34"></span>
</p>
<h2 class="metric-label"> 25-34歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="35to44"></span>
</p>
<h2 class="metric-label"> 35-44歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="45to54"></span>
</p>
<h2 class="metric-label"> 45-54歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="55to64"></span>
</p>
<h2 class="metric-label"> 55-64歲占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
<!-- metric column -->
<div class="col-12 col-sm-6 col-lg-3">
<!-- .metric -->
<div class="card-metric">
<div class="metric">
<p class="metric-value h4">
<span class="value" id="64up"></span>
</p>
<h2 class="metric-label"> 65歲以上占比 </h2>
</div>
</div><!-- /.metric -->
</div><!-- /metric column -->
</div><!-- /metric row -->
</div>
<div class="form-row">
<!-- .card-body -->
<div class="card-body">
<h4 class="card-title"> 社群平台 </h4><!-- .table-responsive -->
<div class="table-responsive">
<table class="table table-hover" style="min-width: 678px" id="preview_media_table">
<thead>
<tr>
<th> 平台 </th>
<th> 網址 </th>
<th> 粉絲數</th>
</tr>
</thead>
<tbody>
<tr>
<td class="align-middle"> Instagram </td>
<td class="align-middle"> https://www.instagram.com/zamy_ding/ </td>
<td class="align-middle"> 754000 </td>
</tr>
</tbody>
</table>
</div><!-- /.table-responsive -->
</div><!-- /.card-body -->
</div>
<div class="form-row">
<!-- form column -->
<label for="input04" class="col-md-3">合作過類型</label> <!-- /form column -->
<!-- form column -->
<div class="col-md-9 mb-3">
<div class="">
<label id="previewKol_tags">Yes, hire me</label>
</div>
</div><!-- /form column -->
</div>
</div><!-- /.modal-body -->
<!-- .modal-footer -->
<div class="modal-footer">
<button type="button" class="btn btn-light" data-toggle="modal" data-target="#clientPreviewModal">Close</button>
</div><!-- /.modal-footer -->
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
</form><!-- /.modal -->

View File

@ -198,3 +198,64 @@
</div><!-- /.modal-dialog -->
</div>
</form><!-- /.modal -->
<!-- .modal -->
<form id="clientPreivewForm" name="clientPreviewForm">
<div class="modal fade" id="clientPreviewModal" tabindex="-1" role="dialog" aria-labelledby="clientPreviewModalLabel" data-backdrop="static" aria-hidden="true">
<!-- .modal-dialog -->
<div class="modal-dialog modal-lg" role="document">
<!-- .modal-content -->
<div class="modal-content">
<!-- .modal-header -->
<div class="modal-header">
<h6 id="socialModalLabel" class="modal-title inline-editable">
<span class="sr-only">KOL Profile</span> <input id="previewKol_name1" type="text" class="form-control form-control-lg" value="" placeholder="KOL Profile" readonly="readonly " required="">
</h6>
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
</button>
</div><!-- /.modal-header -->
<!-- .modal-body -->
<div class="modal-body">
<div class="form-row">
<!-- .card-body -->
<div class="card-body">
<h4 class="card-title"> 合作對象與評價 </h4><!-- .table-responsive -->
<div class="table-responsive">
<table class="table table-hover" style="min-width: 678px" id="preview_kol_table">
<thead>
<tr>
<th> 合作對象 </th>
<th> 平台 </th>
<th> 規格 </th>
<th style="text-align: right;"> 報價 </th>
<th> 執行 </th>
<th> 評價 </th>
</tr>
</thead>
<tbody>
<tr>
<td class="align-middle"> https://www.instagram.com/zamy_ding/ </td>
<td class="align-middle"> Instagram </td>
<td class="align-middle"> https://www.instagram.com/zamy_ding/ </td>
<td class="align-middle"> 754000 </td>
<td class="align-middle"> 754000 </td>
<td class="align-middle"> 754000 </td>
</tr>
</tbody>
</table>
</div><!-- /.table-responsive -->
</div><!-- /.card-body -->
</div>
</div><!-- /.modal-body -->
<!-- .modal-footer -->
<div class="modal-footer">
<button type="button" class="btn btn-light" data-toggle="modal" data-target="#clientPreviewModal">Close</button>
</div><!-- /.modal-footer -->
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
</form><!-- /.modal -->

View File

@ -970,7 +970,7 @@ $(document).ready(function () {
render: function render(data, type, row, meta) {
var ret = '';
ret += '<div class="user-avatar user-avatar-xxl">';
ret += ' <a href="javascript: void();" data-uid="' + row.kol_uid + '" data-method="edit"><img src="' + row.kol_photo + '" alt=""></a>';
ret += ' <a href="javascript: void();" data-uid="' + row.kol_uid + '" data-method="preview"><img src="' + row.kol_photo + '" alt=""></a>';
ret += '</div>';
return ret;
//return row.gift_city + row.gift_area + row.gift_address;
@ -1771,7 +1771,111 @@ function buttonClick2(obj) {
mainPos = mainTable.fnGetPosition($('#' + uid)[0]);
if (type == "preview") {
var formData = {
method: "get",
kol_uid: uid
}
$.ajax({
url: "/Api/kolAddEditDelGet",
type: "post",
data: formData,
success: function (data, textStatus, jqXHR) {
if (data.ret == "yes") {
cleanPreviewData();
var obj = data.kol;
$('#previewKol_name').val(obj.kol_name).trigger('change');
$('#previewKol_descript').val(obj.kol_descript).trigger('change');
$('#previewKol_contact').html(obj.kol_contact1 + ' / ' + obj.kol_contact2).trigger('change');
var makeupStr = '';
$.each(obj.makeups, function (key, value) {
makeupStr += value.optionItem_name + ", ";
});
makeupStr = makeupStr.trim().replace(/,+$/, '');
$('#previewKol_member').html(makeupStr).trigger('change');
var kol_typestr = '';
$.each(obj.styles, function (key, value) {
kol_typestr += value.optionItem_name + ", ";
});
kol_typestr = kol_typestr.trim().replace(/,+$/, '');
$('#previewKol_type').html(makeupStr).trigger('change');
var Kol_fansstr = '';
$.each(obj.fansTypes, function (key, value) {
Kol_fansstr += value.optionItem_name + ", ";
});
Kol_fansstr = Kol_fansstr.trim().replace(/,+$/, '');
$('#previewKol_fans').html(Kol_fansstr).trigger('change');
$('#previewKol_sexualRatio').html(obj.kol_men_ratio + '% : ' + obj.kol_women_ratio + '%').trigger('change');
$('#13to17').html(obj.kol_13_17 + '%').trigger('change');
$('#18to24').html(obj.kol_18_24 + '%').trigger('change');
$('#25to34').html(obj.kol_25_34 + '%').trigger('change');
$('#35to44').html(obj.kol_35_44 + '%').trigger('change');
$('#45to54').html(obj.kol_45_54 + '%').trigger('change');
$('#55to64').html(obj.kol_55_64 + '%').trigger('change');
$('#64up').html(obj.kol_65 + '%').trigger('change');
$.each(obj.medias, function (key, value) {
var trHtml = "";
trHtml += '<tr>';
trHtml += ' <td class="align-middle"> ' + value.optionItem_name + ' </td>';
trHtml += ' <td class="align-middle"> <a href="' + value.kolMedia_url + '" target="_blank"> ' + value.kolMedia_url + '</a> </td>';
trHtml += ' <td class="align-middle"> ' + AppendComma(value.kolMedia_fansNum) + ' </td>';
trHtml += '</tr>';
$('#preview_media_table tbody').append(trHtml);
//$("input:checkbox[value='" + value.optionItem_uid + "']").prop('checked', true);
});
var ret = '';
$.each(obj.tags, function (key, value) {
ret += '<span class="badge badge-pill badge-info">#' + value.tag_text + '</span>&nbsp;';
});
$('#previewKol_tags').html(ret);
$('#clientPreviewModal').modal('toggle');
} else {
alert(data.message);
if (data.err_code == "9999") {
location.href = "/Home/Index";
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert('網路或伺服器發生錯誤,請稍後重試!');
}
});
$('#clientPreviewModal').modal('toggle');
}
if (type == "case") {
$('#kolProject_kol_uid').val(uid);
@ -2004,6 +2108,28 @@ function cleanModalData() {
$('#kol_tags').val(null).trigger('change');
}
function cleanPreviewData() {
$('#previewKol_name').val('');
$('#previewKol_descript').val('');
$('#previewKol_contact').val('');
$('#previewKol_member').val('');
$('#previewKol_type').val('');
$('#previewKol_fans').val('');
$('#previewKol_sexualRatio').val('');
$('#13to17').val('');
$('#18to24').val('');
$('#25to34').val('');
$('#35to44').val('');
$('#45to54').val('');
$('#55to64').val('');
$('#64up').val('');
var trList = $("#preview_media_table").find("tbody").find("tr");
$.each(trList, function (index, item) {
$(item).remove();
});
$('#previewKol_tags').val('');
}
function loadMedia() {
var formData = {
option_uid: 'media'

View File

@ -366,6 +366,15 @@ $(document).ready(function () {
{ data: 'project_modifydate', className: 'align-top text-left', orderable: false, searchable: true },
{ data: 'project_uid', className: 'align-top text-center', orderable: false, searchable: false }],
columnDefs: [
{
targets: 2,
orderable: false,
searchable: true,
render: function render(data, type, row, meta) {
return '<a href="javascript: void(0);" data-uid="' + row.project_uid + '" data-method="preview">' + row.project_name + '</a>';
}
}
,
{
targets: 3,
className: 'align-middle text-center',
@ -490,6 +499,75 @@ function buttonClick2(obj) {
mainPos = mainTable.fnGetPosition($('#' + uid)[0]);
if (type == "preview") {
var formData = {
project_uid: uid
}
$.ajax({
url: "/Api/kolProjectViewList",
type: "post",
data: formData,
success: function (data, textStatus, jqXHR) {
if (data.ret == "yes") {
var trList = $("#preview_kol_table").find("tbody").find("tr");
$.each(trList, function (index, item) {
$(item).remove();
});
$.each(data.detail, function () {
var trHtml = "";
trHtml += '<tr>';
trHtml += ' <td class="align-middle"> ' + this.kol_name + ' </td>';
trHtml += ' <td class="align-middle"> ' + this.optionItem_name + ' </td>';
trHtml += ' <td class="align-middle"> ' + this.mediaItem_name + ' </td>';
trHtml += ' <td class="align-middle" style="text-align: right;"> ' + AppendComma(this.kolProjectPrice_cost) + ' </td>';
var execStr = '';
if (this.kolProject_isExec == 'N') {
if (this.kolProject_noExecReason == '') {
execStr = "未執行";
} else {
execStr = "未執行,原因:" + this.kolProject_noExecReason;
}
} else {
execStr = "執行";
}
trHtml += ' <td class="align-middle"> ' + execStr + ' </td>';
var evaStr = '';
$.each(this.kolProjectEvaluates, function () {
evaStr += this.kolProjectEvaluate_text + ", ";
});
evaStr = evaStr.trim().replace(/,+$/, '');
trHtml += ' <td class="align-middle"> ' + evaStr + ' </td>';
trHtml += '</tr>';
$('#preview_kol_table tbody').append(trHtml);
});
$('#clientPreviewModal').modal('toggle');
} else {
alert(data.message);
if (data.err_code == "9999") {
location.href = "/Home/Index";
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert('網路或伺服器發生錯誤,請稍後重試!');
}
});
}
if (type == "del") {
if (confirm('確定刪除此筆資料? 刪除後將無任何方法回復!')) {
var formData = {